【发布时间】:2019-04-19 13:19:16
【问题描述】:
为什么第一个定义会被拒绝,而第二个定义会被接受,最好的直觉是什么?
let rec a = b (* This kind of expression is not allowed as right-hand side of `let rec' *)
and b x = a x
let rec a x = b x (* oki doki *)
and b x = a x
它是否与 2 种归约方法有关:每个函数替换(和 Rec 分隔符)一个规则 VS 每个函数定义一个规则(和 lambda 提升)?
【问题讨论】:
-
我认为这是由the value restriction 引起的,显式传递参数称为eta 扩展。我不知道如何以任何直观的方式解释这一点。
-
我也没有。与 haskell 相比,这有点烦人,尽管我确信这样做有很好的理由..
标签: ocaml