haskell - 函数列表涉及可能无法正常工作

时间:2012-10-08 23:45:12

标签: list function haskell maybe

我有以下功能:

-- xs: list to be changed
-- ws: list of indices where the values will change to 0
replaceAtIndices xs ws = [if (fromJust (elemIndex x xs)) `elem` ws then 0 else x | x <- xs]

该功能包含2个列表。 ws是xs中我想要更改为0的值的索引。

出于某种原因,它适用于某些情况,而不适用于其他情况:

*Main> replaceAtIndices [1,2,3,4] [2,3]

[1,2,0,0] - 正确

*Main> replaceAtIndices [1,2,3,4] [2]

[1,2,0,4] - 正确

*Main> replaceAtIndices [1,1,2,1,3] [3]

[1,1,2,1,3] - 应该是[1,1,2,0,3]

任何人都可以解释为什么会这样吗?

提前致谢!

1 个答案:

答案 0 :(得分:4)

elemIndex返回列表中项目的第一个出现的索引,因此在第三种情况下,它始终返回0索引{{1} }它与1不匹配,因此不会被替换。

将索引与项目相关联的更好方法是使用3

zip