2008-11-19 3 views

ответ

6

Простой подход, вероятно, для хранения некоторого внешнего состояния и реализации f влияет на его содержимое.

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

Таким образом, х первоначально 0 и каждый вызов е возвращает текущее значение х и сохранить аргумент в качестве нового значения х. Таким образом, (f 0), за которым следует (f 1), оба возвращают 0, оставляя окончательное значение х равным 1. При оценке (f 1), за которой следует (f 0), будет 0, а 1, а окончательный x равен 0.

-1

С call/cc.

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

(write (f)) 

Вызов С в течение любого аргумента + причин f возвращаться немедленно, получая 0 или 1 в зависимости от аргумента, который оценивается в первую очередь.

Но я подозреваю, что он всегда будет оценивать слева направо и, таким образом, вернуть 0.

Смежные вопросы