Приведенный ниже код используется для создания пересечения двух списков: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
он генерирует ошибки?
1. Вы не можете «пересечь два списка». Вы можете пересечь множества. В вашем коде упоминается «союз», а не «пересекается». Вы можете использовать списки для представления множеств. Но вы не должны, большую часть времени. 2. «код не работает» - более конкретный. Ошибка синтаксиса? Ошибка типа? Ошибка семантики (вы получаете результат, но это неправильно)? В последнем случае также включается спецификация (в которой говорится, что правильно). – d8d0d65b3f7cf42
Возможный дубликат [foldl/foldr query] (http://stackoverflow.com/questions/6050306/foldl-foldr-query) – Bakuriu