【发布时间】:2018-04-27 12:06:51
【问题描述】:
scheme的初学者..尝试以下代码来测试lambda的等价性并让
(lambda (x y)
(+ x y)
10
(* x 2))
(let ((k 10)
(y (* 2 k)))
(+ k y))
输出是
#<procedure>
. . k: undefined;
cannot reference undefined identifier
>
任何帮助将不胜感激
【问题讨论】:
-
第一个表达式看起来很糟糕。它添加了
x和y并忘记了结果。表达式实际做的唯一事情是将x加倍,因为函数只返回最后一个表达式的值。 -
let-binding 不等同于 lambda,它等同于应用于参数的 lambda。
(let ((x e)) body)((lambda (x) body) e).