SICP中的练习3.8被描述为blow:
当我们在 1.1.3 节定义评估模型时,我们说过评估表达式的第一步是评估其子表达式。但是我们从未指定子表达式的求值顺序(例如,从左到右或从右到左)。当我们引入赋值时,评估过程参数的顺序会对结果产生影响。定义一个简单的过程 f,如果 + (+ (f 0) (f 1)) 的参数从左到右计算,则计算 (+ (f 0) (f 1)) 将返回 0,但如果参数从右到左计算,则返回 1。
我编写了这个过程f
,这样如果我(f x)
先调用,它就会x
在我f
再次调用时返回。但我不知道它为什么起作用。我写的程序是:
(define f
(let ((s -1))
(lambda (x)
(if (= s -1)
(begin (set! s x)
s)
s))))