我一直在做一些学习,我偶然发现了这段代码:
(((lambda (y)
(lambda (z) (+ z (- 2 y)))) 3) 5)
此代码的输出为4但我不确定原因。我看到3分配给'y',5分配给'z',但我看不清楚为什么。
我原以为3将首先分配给'z'然后分配给5'到'y'但是反过来。方案/球拍采取了哪些步骤来做到这一点?
答案 0 :(得分:0)
你的答案是对的。最明确的理由是对表达式进行逐步评估:
<强> 1。替换y的值
((lambda (z)
(+ z (- 2 3)))
5)
<强> 2。替换z的值
(+ 5 (- 2 3))
第3。确定+
的第二个参数的值(+ 5 -1)
<强> 4。所需的价值就在这里。
4
答案 1 :(得分:0)
首先我们应该了解lambda结构。如果你看下面
(( lambda(var ...)body1 body2 ... ) expr ...)
例如((lambda(y)(* y y)3)==&gt; 3指向y。然后(* 3 3)==&gt; 9
如果你看下面
( >((lambda (y)
(lambda (z) (+ z (- 2 y)))) 3)< ....)
3向你致意。
Then >( ((lambda (y)
(lambda (z) (+ z (- 2 y)))) 3) 5)<
5分到z
我希望这个解决方案可以理解