【问题标题】:Why do I get an exception loop为什么会出现异常循环
【发布时间】:2017-06-08 06:29:59
【问题描述】:

我在序曲中尝试了以下表达:

let x = x in x

我有以下异常

Exception: <<loop>>

为什么表达式是递归的?

【问题讨论】:

标签: haskell


【解决方案1】:

let Haskell 中的绑定是(相互)递归的,这意味着您可以在它们的任何定义中引用任何已定义的变量/函数(= 符号左侧的东西)( = 符号的右侧)。对于有参数(函数)的情况,这几乎总是直观的预期行为。

let fact n = if n == 0 then 1 else n * fact (n - 1) in fact 5

在上面,你可能对fact (n - 1) 可以用于fact n 的定义并不感到惊讶。在您的示例中,您在自己的定义中使用了x

当 Haskell 尝试评估 let x = x in x 时,它会不断尝试扩展 x(进入 RHS x)因此循环。

【讨论】:

    猜你喜欢
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多