Scheme 我能';lambda,我不明白方案的定义

Scheme 我能';lambda,我不明白方案的定义,scheme,Scheme,最近我开始学习英语 但我真的不知道如何解决这个问题 (define A (lambda() (let* ((x 2) (C (lambda (P) (let ((x 4)) (P)))) (D (lambda () x)) (B (lambda () (let ((x 3))

最近我开始学习英语

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

(define A
  (lambda()
    (let* ((x 2)
           (C (lambda (P)
                (let ((x 4))
                  (P))))
           (D (lambda ()
                x))
           (B (lambda ()
                (let ((x 3))
                  (C D)))))
      B)))
问题:将打印什么?浅装订和深装订怎么样

我简单地理解了define,lambda,let,但我不知道如何解决这个问题。
我怎样才能解决它?请给出详细解释,说明过程A返回过程B。因此

(A)
返回

#<procedure:B>
它实际上会呼叫B并返回

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

(let* ((x 2)

这就是为什么2会被打印出来,而不管其他过程中可能存在与D的任何其他绑定。

就我个人而言,我甚至不记得let或let*的意思了,所以我将不参与讨论。但由于迈克尔·斯科特的书涵盖了这么多语言,我想你手头可能没有一个Scheme解释器。这一个看起来不错:(只需按Ctrl-Enter键来计算您的表达式)很抱歉,我帮不了您。如果您正在学习Scheme,我会说安装一个漂亮、简单和完整的环境是值得的,例如。我已经在putty上使用了mit Scheme。但当我执行该代码时,它会打印值:a。我不知道你所说的“浅绑定和深绑定”是什么意思?啊,如果在代码中使用浅绑定的动态范围和使用深绑定的动态范围,会打印什么谢谢你的解释。但我不太明白“C将因此调用D(绑定到参数P)”是什么意思。B使用参数D调用C,参数D在C内部绑定到P。然后调用P,所以这实际上调用了D。
(let* ((x 2)