Обновление определенного элемента в списке

Учитывая список вязов вроде:

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'
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
198
1

Ответы 1

Для этого конкретного сценария я бы просто сопоставил с образцом в списке, связал части, которые я хочу сохранить, с переменными, а затем восстановил бы его с моим значением замены:

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"]

вау, это меня сбило с толку, я не использовал ничего из этого раньше, например, сопоставление с образцом, синтаксис и т. д.

PositiveGuy 12.09.2018 19:17

Хм, похоже, руководство Elm замалчивает эту часть. Здесь есть кое-что об этом: gist.github.com/yang-wei/4f563fbf81ff843e8b1e#list. А здесь: elmprogramming.com/pattern-matching.html

glennsl 12.09.2018 19:24

документы просматривают много :). Все говорят вам, что Elm прост, но это не так, если вы новичок в языке ML и Elm.

PositiveGuy 12.09.2018 19:28

Это просто ЯВЛЯЕТСЯ по сравнению с большинством других языков ML, но все же замалчивает довольно много полезных (в отличие от «строго необходимых») концепций :) Я немного конкретизировал ответ. Надеюсь, это поможет!

glennsl 12.09.2018 19:35

Другие вопросы по теме