;;; Shift and Reset (Filinski and Danvy) (define (mk v) (error "Missing reset!")) (define (abort v) (mk v)) (define (reset exp) (call-with-current-continuation (lambda (k) (let ((m mk)) (set! mk (lambda (r) (set! mk m) (k r))) (abort (exp)))))) (define (shift f) (call-with-current-continuation (lambda (k) (abort (f (lambda (v) (reset (lambda () (k v)))))))))