我有一个值列表,如下所示:
[ ["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)的事情。
答案 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"
。我们做的每一行的位想要转换它。