Почему именованные функции должны быть в отдельном файле в объятиях?

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

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

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


person Casebash    schedule 30.03.2010    source источник
comment
К вашему сведению, GHCI может определять функции. Я не вижу особой причины использовать Hugs в эти дни.   -  person Chuck    schedule 30.03.2010


Ответы (2)


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

person Chuck    schedule 30.03.2010

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

person sepp2k    schedule 30.03.2010
comment
Это говорит о том, что у него есть ограничение, а не о том, почему ограничение существует. - person ; 30.03.2010
comment
Спасибо за разъяснение, но мне все еще любопытно, почему они решили не предоставлять эту функцию. - person Casebash; 30.03.2010