我想要寫一個函數,它接受元件L的列表,指數i的列表,和替換的列表值v。該函數將與所述替換i的升對應於索引值如果l = [1,2,3,4,5,6],i = [0,2]和v = [166,667],則 替換值liv == [166,2,667,4,5,6]Haskell的replaceValues起作用
我的功能:
--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)上得到了一個類型錯誤: –
@ kienjakenobi:哎呀,忘了額外的導入! (即從可能),它應該使用'rsM',而不是'rs':s現在修復。 – ivanm
非常感謝。這確實有效。我會更多地考慮它,看看我完全理解它。 –