Бесконечный цикл в haskell? (новичок)

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

(в ghci)

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

(зависает неограниченно долго, до ^C).

Кто-то может указать на меня в правильном направлении?

Спасибо!

21
задан Don Stewart 19 April 2011 в 02:54
поделиться

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
31
ответ дан 29 November 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: