; PRACTICE FOR A18 and FINAL EXAM (define apply-k ; for the scheme-procedure representation of contunuations. (lambda (k v) (k v))) (define make-k (lambda (v) v)) ; TODO: Convert everything to data-structures continuations (define member?-cps (lambda (item ls k) (cond [(null? ls) (apply-k k #f)] [(equal? (car ls) item) (apply-k k #t)] [else (member?-cps item (cdr ls) (make-k (lambda (cdr-check) (apply-k k cdr-check))))]))) (define set-of-cps (lambda (ls k) (cond [(null? ls) (apply-k k '())] [else (member?-cps (car ls) (cdr ls) (lambda (isIn) (if isIn (set-of-cps (cdr ls) k) (set-of-cps (cdr ls) (make-k (lambda (answer-so-far) (apply-k k (cons (car ls) answer-so-far))))))))]))) (define 1st-cps (lambda (ls k) (apply-k k (car ls)))) (define map-cps (lambda (proc-cps ls k) (cond [(null? ls) (apply-k k '())] [else (map-cps proc-cps (cdr ls) (make-k (lambda (answer-so-far) (proc-cps (car ls) (make-k (lambda (proc-applied-to-val) (apply-k k (cons proc-applied-to-val answer-so-far))))))))]))) (define domain-cps (lambda (rel k) (map-cps 1st-cps rel (make-k (lambda (mapped-ls) (set-of-cps mapped-ls k)))))) (domain-cps '((1 3) (2 4) (1 5) (2 2) (3 6) (2 1) (4 4)) (make-k (lambda (v) (list (length v) (apply max v) (apply min v) (apply + v)))))