给出一个榆木列表,例如:
twoDimensionalList =
[ [ 'U', 'U', ' ' ]
, [ ' ', ' ', ' ' ]
, [ ' ', ' ', ' ' ]
]
如何在榆木列表中用' '
更新第一行的'U'
?我不想使用一个数组,我想弄清楚如何使用列表。我已经完成了将List转换为数组并使用set的操作。我正在尝试学习这次如何在列表中的某个元素上进行更新。
我开始考虑如何做到这一点,但无法到达目的地:
row1 =
take 0 twoDimensionalList
row1Updated =
indexedMap \i row1 -> if i == 2 then --somehow update this item in the map with 'U'
答案 0 :(得分:3)
对于这种特殊情况,我只需要在列表上进行模式匹配,将要保留的部分绑定到变量,然后用替换值重建即可:
case twoDimensionalList of
[ a, b, _ ] :: tail ->
[ a, b, 'U' ] :: tail
_ ->
twoDimensionalList
基本上,::
运算符(称为“ cons”)将匹配或绑定左侧的第一个元素(称为“ head”),列表的其余部分(称为“ tail”)位于正确的。因此,"a" :: ["b", "c"]
将与列表["a", "b", "c"]
相匹配。
模式中的列表文字语法([...]
)将与该大小的列表完全匹配。因此[a, b, _] :: tail
将匹配一个列表,其中第一个(“ head”)元素本身是一个三元素列表,其中前两个元素绑定到变量a
和b
上,我们将要替换的第三个元素被忽略。然后,外部列表的其余部分将绑定到tail
。
然后使用几乎相同的语法重新构建列表。我敢肯定您熟悉列表文字语法,并且cons运算符(::
)的工作方式与其模式形式相似,将左侧的元素添加到右侧的列表中,例如"a" :: ["b", "c"]
将返回列表["a", "b", "c"]