Scheme return 中的以下代码是什么

What does the following code in Scheme return

我试图理解为什么这个特定方案代码 returns 的值为 36。我不明白这些变量是如何绑定的。

(((lambda (fn)
    (lambda(x)(fn (fn x))))
  (lambda (x) (* x 3)))
 4)

如果有人能提供这段代码的全面遍历,对我的学习很有帮助。谢谢。

使用替换原则来评估代码。让你的代码像你所做的那样很好地缩进是有帮助的,因为你可以很容易地看到哪些表达式可以插入到 lambdas

(((lambda (fn) (lambda(x) (fn (fn x)))) (lambda (x) (* x 3))) 4)

首先,我们将 (lambda (x) (* x 3)) 替换为 fn

((lambda(x) ((lambda (x) (* x 3)) ((lambda (x) (* x 3)) x)))  4)

现在我们将 4 替换为最外面的 x

((lambda (x) (* x 3)) ((lambda (x) (* x 3)) 4))

现在我们将 4 替换为右侧 lambda

中的 x
((lambda (x) (* x 3)) (* 4 3))

评价(* 4 3)

((lambda (x) (* x 3)) 12)

12代替x

(* 12 3)

评估

36