Чтобы завершить существующие ответы,
Первая проблема, которую вам нужно решить, это попытаться скомпилировать ваш код или, по крайней мере, понять сообщение об ошибке. Эта подсказка должна дать вам хорошее представление о проблеме, с которой вы столкнулись, и о том, как изменить ее, чтобы получить правильную версию (даже если вы не выполняете требование к функции высокого порядка, по крайней мере, у вас будет работающая версия).
Для этого давайте взглянем на сигнатуру типа предложения шаблона (head : tail),
Сначала для функции (:) мы имеем,
(:) :: a -> [a] -> [a]
Затем мы выводим следующий тип для head и tail (которые являются аргументами (:)),
- head имеет тип Int.
- хвост имеет тип [Int].
Опять же, давайте взглянем на сигнатуру типа (>)
(>) :: Ord a => a -> a -> Bool
Если мы опустим класс ограничений, то для простоты получим:
(>) :: a -> a -> Bool
Или в вашем коде есть,
....
if ( head > tail) ...
....
Который можно переписать, опять же для упрощения, как
....
if ((>) head tail)) ...
....
Используя все предыдущие замечания, вы сможете перестроить тип, предоставленный функции (>), и понять проблему.
Затем вы можете исправить свой код и заставить его работать.
После этого вы сможете взглянуть на функция высшего порядка, а затем исправьте ее правильно.
В качестве общего замечания: когда вы застряли на сложной проблеме, попробуйте разбить ее на более мелкие, и для каждой подзадачи попробуйте применить следующий принцип приготовления.
Сделайте так, чтобы это работало,
сделайте это правильно,
сделайте, если быстро.
person
zurgl
schedule
08.03.2013