haskell中的无限循环?(新手)

Mik*_*ike 21 recursion haskell ghci

我只是在学习Haskell.我认为这会产生一个因子函数......

(在ghci内)

Prelude> let ft 0 = 1
Prelude> let ft n = n * ft (n - 1)
Prelude> ft 5
Run Code Online (Sandbox Code Playgroud)

(无限期挂起,直到^ C).

有人能指出我正确的方向吗?

谢谢!

sth*_*sth 31

两个单独的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
Run Code Online (Sandbox Code Playgroud)

  • 换句话说,你写的是(几乎)正确的Haskell; 问题是GHCI接受的语法与你在单独的源文件中放置的语法不同.如果你把这两行,但没有单词`let`(那就是"几乎"),在Factorial.hs文件中,那么在GHCI中输入:`:load Factorial`然后`ft 5`你将得到120.不知道你是否遇到过"do notation"(例如I/O),但GHCI提示允许的语法与do块中允许的语法相同. (8认同)