Всегда ли сворачивание haskell принимает двухпараметрическую лямбду?

Хаскель newb здесь

Я работаю над этой проблемой в haskell:

(**) Eliminate consecutive duplicates of list elements.
If a list contains repeated elements they should be replaced with a single copy of the element. The order of the elements should not be changed.

Example:
* (compress '(a a a a b c c a a d e e e e))
(A B C A D E)

Решение (которое мне пришлось искать) использует foldr:

compress' :: (Eq a) => [a] -> [a]
compress' xs = foldr (\x acc -> if x == (head acc) then acc else x:acc) [last xs] xs

Этот сгиб, согласно решению, принимает два параметра, х и в соотв. Казалось бы, все складки принимают эти параметры; есть ли исключения из этого? Как складка, которая занимает 3 или более? Если нет, является ли это соглашение избыточным и может ли формула быть написана с меньшим количеством кода?

8
задан Mark Karavan 12 January 2015 в 16:36
поделиться