您将如何使用set!在一个简单的过程f中,如果对+的参数从左至右进行求值,则求值(+(f 0)(f 1))将返回0;而如果对参数进行从右至左求值,则将返回1?

最佳答案

最简单的方法可能是存储一些外部状态并使f的实现影响其内容。

(define x 0)
(define (f n) (let ((tmp x)) (set! x n) tmp))

因此,x最初为0,每次调用f都会返回x的当前值,并将参数保存为x的新值。因此,(f 0)后跟(f 1)都将返回0,而最终的x值为1。在求值(f 1)后跟(f 0)的结果将为0,然后为1,最终x为0。

关于scheme - 如何使用设置!在Scheme函数中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/300658/

10-10 19:43