方案中的正常顺序和应用顺序评估
For the 1st example given on site: View-Site, my understanding is that normal order evaluates to [6;1;1]
and applicative order evaluates to [6;2;2]
Can anyone please confirm my assessment?
Regards,
darkie
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好的,让我们通过正常顺序计算来完成
(cons res v)
的计算步骤:v
已定义为(cons a (cons b '( )))
,所以我们有cons res (cons a (cons b '()))
。res
被定义为(foo ...)
,所以最后
foo x y
被定义为(+ xyy)
code>,因此用(begin (set! a (+ a 1)) a)
替换x
和(begin (set! b (* b 2) )) b)
对于y
,我们得到:现在让我们评估一下:为了获得 cons 的结果,我们首先需要评估它的第一个参数
(+ .. .)
。因此,我们首先需要计算+
的第一个参数,即(begin (set! a (+ a 1)) a)
。计算结果为 2,因此a
的值现在为 2,并且+
的第一个参数也是 2。现在我们对第二个参数执行相同的操作。这也计算为 2 并将 b 设置为 2。第三个参数又是(begin (set!b (* b 2)) b)
,因此b
的值现在是 4,第三个参数是 4。因此cons
的第一个参数是结果(+ 2 2 4)
,即 8 和的值a
和b
分别是 2 和 4。现在我们需要计算第二个参数
(cons a (cons b '()))
。因此,由于a
和b
的值为 2 和 4,因此最终结果为(8 2 4)
。Ok, let's go through the steps of evaluating
(cons res v)
with normal-order evaluation:v
has been defined as(cons a (cons b ’()))
, so we havecons res (cons a (cons b ’()))
.res
is defined as(foo ...)
, so we haveLastly
foo x y
is defined as(+ x y y)
, so by substituting(begin (set! a (+ a 1)) a)
forx
and(begin (set! b (* b 2)) b)
fory
, we get:So now let's evaluate this: To get the result of cons, we first need to evaluate its first argument,
(+ ...)
. So we first need to evaluate the first argument of+
which is(begin (set! a (+ a 1)) a)
. This evaluates to 2, so the value ofa
is now 2 and the first argument to+
is also 2. Now we do the same thing with the second argument. This also evaluates to 2 and sets b to 2. The third argument is(begin (set! b (* b 2)) b)
again, so the value ofb
is now 4 and the third argument is 4. So the first argument tocons
is the result(+ 2 2 4)
, which is 8 and the values ofa
andb
are 2 and 4.Now we need to evaluate the second argument,
(cons a (cons b ’()))
. So since the value ofa
andb
are 2 and 4, the end result is(8 2 4)
.