以下代码用于生成两个列表的交集:
unionSet :: Eq a => [a] -> [a] -> [a]
unionSet a b = foldl (\acc x -> if elem x acc then acc else acc ++ [x]) a b
为什么foldl
功能有效,但当我使用foldr
时会产生错误?
答案 0 :(得分:6)
foldr
的类型为
(a -> b -> b) -> [a] -> b -> b
而foldl
的类型为
(b -> a -> b) -> [a] -> b -> b
注意两个参数的顺序。
(\x acc -> ...
会解决错误。