The facility: (lambda (C) (let ((f #t)) (cons (lambda x (if f (apply C x) '())) (lambda () (set! f #f))))) The demo: (define rv (lambda (C) (let ((f #t)) (cons (lambda x (if f (apply C x) '())) (lambda () (set! f #f)))))) (define pair (rv car)) (define Car (car pair)) (define rvc (cdr pair)) (Car '(a b c)) ; => a (rvc) (Car '(a b c)) ; => () (car '(a b c)) ; => a