Учитывая список вязов вроде:
twoDimensionalList =
[ [ 'U', 'U', ' ' ]
, [ ' ', ' ', ' ' ]
, [ ' ', ' ', ' ' ]
]
Как я могу обновить ' '
в первой строке с помощью 'U'
в списке Elm List? Я не хочу использовать массив, я хочу выяснить, как это сделать с помощью списка. Я уже преобразовал список в массив и использовал set. Я пытаюсь узнать, как на этот раз обновить определенный элемент в списке.
Я начал думать, как бы это сделать, но никак не могу:
row1 =
take 0 twoDimensionalList
row1Updated =
indexedMap \i row1 -> if i == 2 then --somehow update this item in the map with 'U'
Для этого конкретного сценария я бы просто сопоставил с образцом в списке, связал части, которые я хочу сохранить, с переменными, а затем восстановил бы его с моим значением замены:
case twoDimensionalList of
[ a, b, _ ] :: tail ->
[ a, b, 'U' ] :: tail
_ ->
twoDimensionalList
По сути, оператор ::
(называемый «cons») будет сопоставлять или связывать первый элемент (называемый «head») слева от него, а остальную часть списка («хвост») справа. Итак, "a" :: ["b", "c"]
будет соответствовать списку ["a", "b", "c"]
.
Синтаксис литерала списка ([...]
) в шаблоне будет соответствовать списку точно такого размера. Таким образом, [a, b, _] :: tail
будет соответствовать списку с первым («головным») элементом, представляющим собой трехэлементный список, в котором первые два элемента привязаны к переменным a
и b
, а третий элемент, который мы собираемся заменить, является игнорируется. Остальная часть внешнего списка привязывается к tail
.
Затем список восстанавливается с использованием почти такого же синтаксиса. Я уверен, что вы знакомы с синтаксисом литерала списка, а оператор cons (::
) работает аналогично его шаблонной форме, добавляя элемент слева в список справа, например "a" :: ["b", "c"]
вернет список ["a", "b", "c"]
Хм, похоже, руководство Elm замалчивает эту часть. Здесь есть кое-что об этом: gist.github.com/yang-wei/4f563fbf81ff843e8b1e#list. А здесь: elmprogramming.com/pattern-matching.html
документы просматривают много :). Все говорят вам, что Elm прост, но это не так, если вы новичок в языке ML и Elm.
Это просто ЯВЛЯЕТСЯ по сравнению с большинством других языков ML, но все же замалчивает довольно много полезных (в отличие от «строго необходимых») концепций :) Я немного конкретизировал ответ. Надеюсь, это поможет!
вау, это меня сбило с толку, я не использовал ничего из этого раньше, например, сопоставление с образцом, синтаксис и т. д.