Самый простой подход, вероятно, состоит в том, чтобы сохранить некоторое внешнее состояние и сделать так, чтобы реализация 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.