Подтвердить что ты не робот

Бесконечная петля в haskell? (Новичок)

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

(внутри ghci)

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

(зависает бесконечно, до ^ C).

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

Спасибо!

4b9b3361

Ответ 1

Два отдельных оператора 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