Бесконечный цикл в хаскеле? (Новичок) - PullRequest
19 голосов
/ 25 мая 2010

Я только учу Хаскель. Я думал, что это даст функцию факториала ...

(в пределах ghci)

Prelude> let ft 0 = 1
Prelude> let ft n = n * ft (n - 1)
Prelude> ft 5

(висит неопределенно, до ^ C).

Может ли кто-нибудь указать мне правильное направление?

Спасибо!

1 Ответ

30 голосов
/ 25 мая 2010

Два отдельных оператора let интерпретируются независимо друг от друга. Сначала определяется функция ft 0 = 1, а затем определяется новая функция ft n = n * ft (n - 1), перезаписывающая первое определение.

Чтобы определить одну функцию с двумя случаями, вы должны поместить оба случая в один оператор let. Чтобы сделать это в одной строке в приглашении GHCI, вы можете разделить два случая на ;:

Prelude> let ft 0 = 1; ft n = n * ft (n - 1)
Prelude> ft 5
120
...