2016-04-04 13 views
1

次のコードは、二つのリストの交差点を生成するために使用されます。Haskellのfoldrとfoldlの

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を使用する場合、それはエラーが発生しますか? foldlタイプ

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

を有している

+0

1.「2つのリストを交差させる」ことはできません。交差することができます。あなたのコードには、 "交差"ではなく "共用体"が記述されています。リストを使用してセットを表すことができます。しかし、ほとんどの場合、あなたはすべきではありません。 2.「コードは機能しません」 - 具体的にする。構文エラー?タイプエラー?セマンティクスエラー(結果が出ますが、間違っています)?後者の場合は、仕様が含まれています(つまり、正しいことが示されます)。 – d8d0d65b3f7cf42

+0

[foldl/foldr query](0000306/foldl-foldr-query) – Bakuriu

答えて

6

foldr

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

を有する二つのパラメータの順序に注意してください。

(\x acc -> ... 

このエラーは修正されます。

+1

の可能な複製これは、オペレータがどのような順序で適用されるかをより明白にするために行われます。 – PyRulez

関連する問題