怎么用套装!在Scheme函数?

时间:2008-11-19 00:27:02

标签: scheme

你会如何使用套装!在一个简单的过程中,如果从左到右计算+的参数,如果从右到左计算参数,则评估(+(f 0)(f 1))将返回0?

2 个答案:

答案 0 :(得分:6)

最简单的方法可能是存储一些外部状态,并且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。 / p>

答案 1 :(得分:-1)

使用call/cc

(define (f)
  (call/cc
    (lambda (c) (+ (c 0) (c 1)))))

(write (f))

+的任一参数中调用c会导致f立即返回,产生0或1,具体取决于首先评估哪个参数。

但我怀疑它总是从左到右评估,因此返回0。