要素l、インデックスiのリスト、および置換値のリストを取る関数を書いてみたい。関数は、iのインデックスに対応するlの値を、 vの対応する値Haskell replaceValues関数
例:l = [1,2,3,4,5,6]、i = [0,2]、v = [166,667]の場合、 replaceValues liv == [166,2,667,4,5,6]
My機能:
--Replace the values in list l at indices in i with the
-- corresponding value in v
replaceValues :: [a] -> [Int] -> [a] -> [a]
replaceValues l [] [] = l
replaceValues l i v = x ++ [head v] ++ (replaceValues (tail y) shiftedIndices (tail v))
where
(x,y) = splitAt (head i) l
--The indices must be shifted because we are changing the list
shiftedIndices = map ((-)((head i) + 1)) (tail i)
この機能マナgesはiの最初のインデックスの値を正しく置き換えるが、次のすべての値を置き換える。上記の例では、出力[166,667,3,4,5,6]となります。
これは非常に簡潔な実装です。しかし、関数rep(i、a)のrsで型エラーが発生する –
@kienjakenobi:whoops、余分なインポートを忘れてしまった! (つまり、fromMaybe)、 'rs'ではなく' rsM'を使うべきです: – ivanm
ありがとうございました。これは実際に動作します。私はそれを全面的に理解していることをもっと見ていきます。 –