Обрабатывает ли Elixir каким-либо образом совпадающие значения относительно констант? Примером этого может быть:
Все примеры являются псевдосинтаксисом идеи
- (значение после) 3 = x
- iex>
[ _ | [ 3 | [ x | _ ] ] ] = [1,2,3,4,5,6,7] // x = 4
- (значение перед 6) = x
- iex>
[ _ | [ x | [ 6 | _ ] ] ] = [1,2,3,4,5,6,7] // x = 5
- (подсписок значений от 3 до 6) = x
- iex>
[ _ | [ 3 | [ x | [ 6 | _ ] ] ] ] = [1,2,3,4,5,6,7] // x = [4,5]
- (подсписок из 3 значений после 4) = [a, b, c]
- iex>
[ _ | [ 3 | [ [a,b,c] | _ ] ] = [1,2,3,4,5,6,7] // x = [5,6,7]
К сожалению, большинство книг и онлайн-документации охватывают только абсолютное позиционирование от первого индекса, например N элементов из головы через [ head | tail ]
, но по мере того, как целевое значение удаляется от первого элемента, это становится глупо с синтаксисом типа [ _ | [ _ | [ _ | [ x | _ ] ] ] ]
, чтобы получить 4-й элемент в список.
Есть ли какой-либо синтаксис для сопоставления относительных индексов списка? Примером неправильного, но концептуально правдоподобного синтаксиса может быть получение последнего индекса в списке через [ _ | [ x | [] ] ]
или получение значения после индекса 3 через [ _ | [ 3 | [ x | _ ] ] ]
Предоставьте пример ввода и ожидаемый результат. Очень сложно понять, чего вы пытаетесь достичь. — person occurr schedule 26.01.2017
Это яснее с ожидаемыми результатами? Я полностью осознаю, что этот код недействителен, но должен продемонстрировать цель. — person occurr schedule 26.01.2017
Elixir / Erlang не поддерживает сопоставление с образцом элемента в неизвестной позиции в списке, поэтому ни один из 4 случаев, о которых вы упомянули, не может быть выполнен с сопоставлением с образцом.
Единственное, что можно упростить, — это то, где вам нужен 4-й элемент списка. Вместо:
вы можете использовать узор:
Вы злоупотребляете сопоставлением с образцом, как это известно в Elixir. Если вы хотите найти значения в списке, нет шаблона.
— (значение после) 3 = x
— (значение до 6) = x
— (подсписок значений от 3 до 6) = x
— (подсписок из 3 значений после 4) = [a, b, c]
Enum
.Я бы не назвал это злоупотреблением сопоставлением с образцом как таковым. Идея сопоставления с образцом не ограничивается исправлением образцов положения. — person occurr; 27.01.2017