方案中的正常顺序和应用顺序评估

发布于 2024-09-06 11:10:11 字数 237 浏览 3 评论 0原文

对于网站上给出的第一个示例:View-Site,我的理解是,正常顺序的计算结果为 [6;1;1],适用顺序的计算结果为 [6;2;2]

有人可以确认我的评估吗?

问候,
黑暗者

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

守不住的情 2024-09-13 11:10:12

好的,让我们通过正常顺序计算来完成 (cons res v) 的计算步骤:

v 已定义为 (cons a (cons b '( ))),所以我们有 cons res (cons a (cons b '()))res 被定义为 (foo ...),所以

(cons (foo (begin (set! a (+ a 1)) a)
           (begin (set! b (* b 2)) b))
      (cons a (cons b ’())))

最后 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)
         (begin (set! b (* b 2)) b)
         (begin (set! b (* b 2)) b))
      (cons a (cons b ’())))

现在让我们评估一下:为了获得 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 和 的值ab 分别是 2 和 4。

现在我们需要计算第二个参数 (cons a (cons b '()))。因此,由于 ab 的值为 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 have cons res (cons a (cons b ’())). res is defined as (foo ...), so we have

(cons (foo (begin (set! a (+ a 1)) a)
           (begin (set! b (* b 2)) b))
      (cons a (cons b ’())))

Lastly foo x y is defined as (+ x y y), so by substituting (begin (set! a (+ a 1)) a) for x and (begin (set! b (* b 2)) b) for y, we get:

(cons (+ (begin (set! a (+ a 1)) a)
         (begin (set! b (* b 2)) b)
         (begin (set! b (* b 2)) b))
      (cons a (cons b ’())))

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 of a 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 of b is now 4 and the third argument is 4. So the first argument to cons is the result (+ 2 2 4), which is 8 and the values of a and b are 2 and 4.

Now we need to evaluate the second argument, (cons a (cons b ’())). So since the value of a and b are 2 and 4, the end result is (8 2 4).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文