Простая функция суммы в Haskell из книги Грэма Хаттона «Программирование в Haskell» не работает - PullRequest
1 голос
/ 21 июня 2020

В первом примере кода в «Программировании в Haskell» указано следующее:

Вспомните функцию sum, использованную ранее в этой главе, которая производит сумму списка чисел. В Haskell сумма может быть определена с помощью двух уравнений:

sum [] = 0      
sum (n:ns) = n + sum ns

Сразу этот код не работает как в интерпретаторе ghci, так и при компиляции с ошибкой: «Неполные шаблоны в сумме функций "

После дальнейшего исследования выяснилось, что это связано с тем, что случай одного числа не рассматривается. Что меня беспокоит, так это то, что следующие несколько примеров в книге также не работают.

Я что-то упустил? Книга была выпущена сравнительно недавно, в 2016 году, и я не могу найти никого, кто бы на это пожаловался.

1 Ответ

8 голосов
/ 21 июня 2020

Когда вы вводите первое предложение определения sum и нажимаете Enter, GHCI предполагает, что вы закончили, и должен оценить программу. Программа

sum [] = 0

не указывает, что делать, если аргумент не пуст, поэтому вы получаете ошибку «неполные шаблоны».

GHCI имеет :{ и :} команды, позволяющие вам вводить несколько предложений (или другой код, охватывающий несколько строк:

Prelude> :{
Prelude| sum [] = 0
Prelude| sum (n:ns) = n + sum ns
Prelude| :}
Prelude> sum []
0
Prelude> 

В общем, я бы рекомендовал сохранить определения, с которыми вы работаете, в файл и загрузить этот файл в GHCI . Затем вы можете :reload, когда внесете некоторые изменения и вызовете свою функцию / ы с различными аргументами, чтобы посмотреть, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...