【发布时间】:2010-12-06 15:55:16
【问题描述】:
对于下面的代码,我无法理解绑定 (x, y, z) 是如何发生的。请查看代码,我将在下面更详细地解释我的问题:
(define (w x)
(lambda (y z)
(begin
(set! x (+ (* y x) z)) x)))
(define f1 (w 3))
(f1 4 2)
(f1 2 1)
输出是 14、29。这些是 x 的值。
这意味着最初,x=3,y=4,z=2。在第二次调用中,即 (f1 2 1), x=14, y=2,z=1。
我的疑惑:
最初的绑定是如何发生的,为什么是 x=3、y=4 和 z=2?如果它与函数中的 lambda 表达式有关,请详细说明它是如何工作的。我感觉这是我的理解失败的地方。。
接下来,为什么在第二次调用中保留了 x=14 的初始答案,即 (f1 2 1)?
感谢您对此进行调查 :)
【问题讨论】: