我正在寻找一种方法来修改haskell List的第i个元素。让我们说foobar
就是这样一个功能,然后以下工作。
let xs = ["a","b","c","d"]
foobar xs 2 "baba" -- xs = ["a","b","baba","d"]
感谢您的回复!
答案 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