Почему именованные функции должны быть в отдельном файле в объятиях? - PullRequest
0 голосов
/ 30 марта 2010

В Haskell за 5 шагов Факториальная функция определяется следующим образом:

let fac n = if n == 0 then 1 else n * fac (n-1)

Но для объятий говорится, что fac должен быть в fac.h. Может кто-нибудь объяснить, почему это так - отсутствие возможности определять именованные функции кажется огромным ограничением для интерпретатора?

Ответы [ 2 ]

2 голосов
/ 30 марта 2010

Насколько я могу судить, основной ответ заключается в том, что интерактивный верхний уровень Hugs по сути является синтаксическим анализатором выражений, а определения функций / данных не являются выражениями. Ваш пример действительно сработал бы, если бы вы сделали это выражением и написали let fac n = if n == 0 then 1 else n * fac (n-1) in fac 19. Добавление поддержки для этого было бы довольно большим усилием, и, по-видимому, разработчики Хагса считали, что этого достаточно, чтобы требовать определения функций / данных в файлах.

2 голосов
/ 30 марта 2010

Объятия не позволяют определить любые именованные функции (рекурсивные или нет). Также отсутствует возможность определения типов данных.

...