我编写了一个函数来检查列表是否与条件匹配,如果匹配,则会打印该值两次。但是,在ghc它给我一个错误,我不明白为什么......
verifyList f xs = foldl(\x acc -> if f x then x:x:acc else acc) [] xs
任何帮助?
答案 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]