;----------------------------------------------- ; CONTINUATIONS REPRESENTED BY SCHEME PROCEDURES ;----------------------------------------------- (define apply-k (lambda (k v) (k v))) (define make-k (lambda (v) v)) (define make-cps (lambda (f) (lambda (x k) (apply-k k (f x))))) (define null?-cps (make-cps null?)) (define car-cps (make-cps car)) (define cdr-cps (make-cps cdr)) (define cons-cps (lambda (x y k) (apply-k k (cons x y)))) (define eq?-cps (lambda (x y k) (apply-k k (eq? x y)))) ; rewrite this in "fully CPSed" form (define memq-cps (lambda (sym ls k) (cond [(null? ls) (apply-k k #f)] [(eq? (car ls) sym) (apply-k k #t)] [else (memq-cps sym (cdr ls) k)]) )) ; For extra credit, rewrite this in "fully CPSed" form (define intersection-cps (lambda (los1 los2 k) (if (null? los1) (apply-k k '()) (intersection-cps (cdr los1) los2 (make-k (lambda (cdr-intersection) (memq-cps (car los1) los2 (make-k (lambda (is-in?) (apply-k k (if is-in? (cons (car los1) cdr-intersection) cdr-intersection)))))))))))