我无法理解方案定义,lambda,让我们清楚

时间:2013-04-07 05:50:22

标签: scheme

最近我开始学习计划语言

但我真的不知道如何解决这个问题。

(define A
  (lambda()
    (let* ((x 2)
           (C (lambda (P)
                (let ((x 4))
                  (P))))
           (D (lambda ()
                x))
           (B (lambda ()
                (let ((x 3))
                  (C D)))))
      B)))

Q值。什么会打印?如何浅层绑定和深层绑定?

我简单地理解了define,lambda,let *但是我不知道解决这个问题。 我该如何解决?请评论详细解释

1 个答案:

答案 0 :(得分:2)

程序A返回程序B.所以

(A)

返回

#<procedure:B>

如果你想要它被执行,你必须运行

((A))

实际上会调用B并返回

2

那发生了什么? 呼叫B将以D作为参数调用C.因此,C将调用D(绑定到参数P)。 D返回x所以打印的是在过程D中绑定到x的任何值。由于Scheme是词法范围的,并且D没有任何x的绑定,因此使用词汇上下文的绑定,来自

(let* ((x 2)

这就是2被打印的原因,无论其他程序中可能存在与D的任何其他绑定。