Haskell foldr和foldl

时间:2016-04-04 20:11:38

标签: haskell

以下代码用于生成两个列表的交集:

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时会产生错误?

1 个答案:

答案 0 :(得分:6)

foldr的类型为

(a -> b -> b) -> [a] -> b -> b

foldl的类型为

(b -> a -> b) -> [a] -> b -> b 

注意两个参数的顺序。

(\x acc -> ...

会解决错误。