如何修改Haskell列表的第i个元素?

时间:2012-02-09 22:40:02

标签: list haskell

我正在寻找一种方法来修改haskell List的第i个元素。让我们说foobar就是这样一个功能,然后以下工作。

let xs = ["a","b","c","d"]
foobar xs 2 "baba" -- xs = ["a","b","baba","d"]

感谢您的回复!

4 个答案:

答案 0 :(得分:4)

您可以使用splitAt

执行此操作
Prelude> let xs = ["a","b","c","d"]
Prelude> (\(l,_:r)->l++"baba":r) $ splitAt 2 xs
["a","b","baba","d"]

答案 1 :(得分:3)

let xs = ["a","b","c","d"]
take 2 xs ++ ["baba"] ++ drop 3 xs

答案 2 :(得分:2)

change n x = zipWith (\k e -> if k == n then x else e) [0..]

答案 3 :(得分:1)

直接执行此操作的简单功能:

replaceAt _ _ []     = []
replaceAt 0 x (_:ys) = x:ys
replaceAt n x (y:ys) = y:replaceAt (n - 1) x ys