需要帮助理解Scheme代码中的绑定

时间:2010-12-06 15:55:16

标签: variables binding scheme

对于下面的代码,我无法理解绑定(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)?

感谢您对此进行调查:)

1 个答案:

答案 0 :(得分:4)

运行w时,它会从内部lambda中创建一个闭包。因为x来自该内部lambda之外,x存储在该闭包内(在本例中为f1)。

因此,f1内部有一个代表x的变量,它从3开始。当你运行f1时,它会计算数学,然后设置自己的数学 x为14。

道德是,lambda不仅仅是代码;它的代码与关闭的变量相结合,例如x