答案 0 :(得分:3)
好的,让我们通过正常评估评估(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
被定义为(+ x y y)
,因此将(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 ’())))
现在让我们评估一下:为了得到缺点的结果,我们首先需要评估它的第一个参数(+ ...)
。所以我们首先需要评估+
的第一个参数(begin (set! a (+ a 1)) a)
。这个求值为2,因此a
的值现在为2,而+
的第一个参数也是2.现在我们对第二个参数做同样的事情。这也计算为2并将b设置为2.第三个参数再次为(begin (set! b (* b 2)) b)
,因此b
的值现在为4,第三个参数为4.因此{{1}的第一个参数}是结果cons
,为8,(+ 2 2 4)
和a
的值为2和4。
现在我们需要评估第二个参数b
。因此,(cons a (cons b ’()))
和a
的值为2和4,最终结果为b
。