【发布时间】:2011-02-23 11:42:24
【问题描述】:
我只是在学习 Haskell。我认为这会产生一个阶乘函数...
(在 ghci 内)
Prelude> let ft 0 = 1
Prelude> let ft n = n * ft (n - 1)
Prelude> ft 5
(无限期挂起,直到 ^C)。
有人能指出正确的方向吗?
谢谢!
【问题讨论】:
我只是在学习 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
【讨论】:
let(那是“几乎”)放在一个文件Factorial.hs中,然后在GHCI中输入::load Factorial然后ft 5你会得到120。不要知道您是否遇到过“do notation”(例如对于 I/O),但是 GHCI 提示符处允许的语法与 do 块中允许的语法相同。