0

可能重复:
更新单个列表中元素列表的列表?

我有一个值列表,如下所示:

[ ["Off","Off","Off"],
  ["Off","Off","Off"],
  ["Off","Off","Off"] ]

并希望返回以下内容:

[ ["Off","Off","Off"],
  ["Off",*"On"*,"Off"],
  ["Off","Off","Off"] ]

我有以下功能,仅适用于单独的列表:

replaceAll 0 newValue (x:xs) = newValue:xs
replaceAll b newValue (x:xs) = x:replaceAll (b-1) newValue xs

但是,我似乎在处理列表中的这些多个列表时遇到了麻烦。我将如何设计一个函数来处理这两个列表(即另一个列表中的列表)?

仍然试图让我的头脑了解整个 (x:xs) 事情。

4

1 回答 1

3

列表不是这类事情的最佳结构。但是无论如何,让我们使用列表。

我们将调整您replaceAll,以便您提供一个函数来指定如何用新值替换旧值,而不是提供替换值。

replaceAll 0 f (x:xs) = f x:xs -- Here's where we transform x using f
replaceAll b f (x:xs) = x:replaceAll (b-1) f xs

现在我们可以使用replaceAllon 对矩阵的特定行执行我们想要的替换:

test = replaceAll 1 (replaceAll 1 (const "On")) yourList

使用该const "On"函数是因为当我们到达特定元素时,我们不再想要转换它,我们只想用"On". 我们确实想要对其进行转换的每一行的位。

于 2011-05-02T18:48:45.670 回答