更新列表中的元素列表?

时间:2011-05-02 18:37:19

标签: list haskell ghci

  

可能重复:
  Update a list of a list of elements in a single list?

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

[ ["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)的事情。

1 个答案:

答案 0 :(得分: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

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

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

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