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
我试图理解为什么这个特定方案代码 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