Простое сопоставление шаблонов в Haskell

#haskell

#haskell

Вопрос:

Я новичок в Haskell, и я попытался ввести следующее в WinGHCi:

 Prelude> factorial 0=1
Prelude> factorial n=n*factorial (n-1)
Prelude> factorial 5
  

Но когда я это сделал, WinGHCi застрял и ничего не делал. Почему он не распечатал факториал 5?

Ответ №1:

Когда вы пишете в GHCi

 > let x = 4
> let x = 5
  

второе определение переопределяет первое, удаляя его из среды. Это также справедливо для функций.

 > let f 0 = 1
> let f n = 1   f (n-1)
  

эквивалентно

 > let f n = 1   f (n-1)
  

который будет повторяться вечно при любом вводе.

В GHCi вы можете использовать оба варианта, используя

 > let f 0 = 1 ; f n = 1   f (n-1)
  

но лучший подход — отредактировать .hs файл, записать туда свои определения, а затем загрузить его в GHCi.