在Haskell中遇到问题

时间:2015-02-05 22:07:22

标签: haskell

我编写了一个函数来检查列表是否与条件匹配,如果匹配,则会打印该值两次。但是,在ghc它给我一个错误,我不明白为什么......

verifyList f xs = foldl(\x acc -> if f x then x:x:acc else acc) [] xs

任何帮助?

1 个答案:

答案 0 :(得分:2)

  

您的意思是foldr而不是foldl。如果我做出改变那么它对我有用。

     

您也可以在没有折叠的情况下完成此操作

verifyList f xs = concatMap (\x -> [x, x]) $ filter f xs
     

我会更清楚地说明你的意图。首先过滤列表以找到满足f的所有内容,然后复制每个元素。

- bheklilr

基于左下角评论的另一个选项:

verifyList f xs = [y | x <- xs, f x, y <- [x, x]]

我自己对bheklilr的方法进行了调整,因为我觉得这样:

verifyList f xs = filter f xs <**> [id, id]