;;; File: ;;; cont.scm ;;; Author: ;;; Samuel A. Rebelsky ;;; Contents: ;;; Some simple continuation examples. ; A place to store continuations. (define cont null) ; Like (+ 3 (* 4 5))), except we grab the current continuation ; with the 5 (+ 3 (* 4 (let/cc k (set! cont k) 5))) (define print-squares (lambda (lst) (let/cc exit (map (lambda (x) (if (< x 0) (exit) (begin (display (* x x)) (newline)))) lst)))) (define exit null) (let/cc k (set! exit k)) (define resume null) (define pause (lambda () (let/cc k (set! resume k)) (exit))) (define stupid (lambda () (display "Alpha") (newline) (pause) (display "Beta") (newline) (pause) (display "Gamma") (newline) )) (define stop 0) (let/cc stopc (set! stop stopc)) ; I'm not sure if I'll use the following example, but it's here ; for my notes. (define interact (let* ((resume #f) (pause (lambda () (let/cc p (set! resume p) (stop)))) (done (lambda () (set! resume #f)))) (lambda () (if resume (resume) (begin (display "Hi!") (newline) (pause) (display "Goodbye") (newline) (pause) (display "Still running") (newline) (done))))))