【问题标题】:Infinite loop in haskell? (newbie)haskell中的无限循环? (新手)
【发布时间】: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 recursion ghci


    【解决方案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
    

    【讨论】:

    • 换句话说,你写的是(几乎)正确的Haskell;问题是 GHCI 接受的语法与您放在单独的源文件中的语法不同。如果你把这两行,但没有单词let(那是“几乎”)放在一个文件Factorial.hs中,然后在GHCI中输入::load Factorial然后ft 5你会得到120。不要知道您是否遇到过“do notation”(例如对于 I/O),但是 GHCI 提示符处允许的语法与 do 块中允许的语法相同。
    猜你喜欢
    • 2013-10-05
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    相关资源
    最近更新 更多