Я просто изучаю Haskell. Я думал, что это произведет функцию факториала...
(в ghci)
Prelude> let ft 0 = 1
Prelude> let ft n = n * ft (n - 1)
Prelude> ft 5
(зависает неограниченно долго, до ^C).
Кто-то может указать на меня в правильном направлении?
Спасибо!
Два отдельных утверждения 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