为什么这是输出?

时间:2015-04-19 23:40:15

标签: lambda scheme racket

我一直在做一些学习,我偶然发现了这段代码:

(((lambda (y)
     (lambda (z) (+ z (- 2 y)))) 3) 5)

此代码的输出为4但我不确定原因。我看到3分配给'y',5分配给'z',但我看不清楚为什么。

我原以为3将首先分配给'z'然后分配给5'到'y'但是反过来。方案/球拍采取了哪些步骤来做到这一点?

2 个答案:

答案 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

我希望这个解决方案可以理解