(define (get k) (lambda (u d) (u (lambda (v u*) ((k v) u* d))))) (define (put v k) (lambda (u d) (d v (lambda (d*) ((k) u d*))))) (define (pipe a b) (lambda (u d) (a u (lambda (v u*) (b (lambda (d*) (d* v u*)) d))))) (define (run pipeline) (pipeline 'bogus-source 'bogus-sink)) (define (produce n) (put n (lambda () (produce (+ n 1))))) (define (consume) (get (lambda (n) (begin (display n) (newline) (consume))))) (define pipeline (pipe (produce 1) (consume))) ;(run pipeline) ;;;------------------------------------------------------------ ;; Safe-for-space version (define (get1 k d) (lambda (v u*) ((k v) u* d))) (define (get k) (lambda (u d) (u (get1 k d)))) (define (put1 k u) (lambda (d*) ((k) u d*))) (define (put v k) (lambda (u d) (d v (put1 k u))))