;;; Warning! Code not tested so you may find some typos. --Amr (define dupla-cps (lambda (a n k) (if (zero? n) (k '()) (dupla-cps a (sub1 n) (lambda (v) (k (cons a v))))))) (define listmul-cps (lambda (ls k) (if (null? ls) (k 1) (listmul-cps (cdr ls) (lambda (v) (k (* (car ls) v))))))) (define treemul-cps (lambda (tr k) (cond [(null? tr) (k 1)] [(not (pair? (car tr))) (treemul-cps (cdr tr) (lambda (v) (k (* (car tr) v))))] [else (treemul-cps (car tr) (lambda (v1) (treemul-cps (cdr tr) (lambda (v2) (k (* v1 v2))))))]))) (define union-cps (lambda (a b k) (cond [(null? a) (k b)] [(memv (car a) b) (union-cps (cdr a) b k)] [else (union-cps (cdr a) b (lambda (v) (k (cons (car a) v))))]))) (define fib-cps (lambda (n k) (if (< n 2) (k 1) (fib-cps (- n 1) (lambda (v1) (fib-cps (- n 2) (lambda (v2) (k (+ v1 v2))))))))) (define snoc-cps (lambda (i ls k) (if (null? ls) (k (list i)) (snoc-cps i (cdr ls) (lambda (v) (k (cons (car ls) v))))))) (define map-cps (lambda (f-cps ls k) (if (null? ls) (k '()) (f-cps (car ls) (lambda (v1) (map-cps f-cps (cdr ls) (lambda (v2) (k (cons v1 v2))))))))) (define filter-cps (lambda (pred-cps ls k) (if (null? ls) (k '()) (pred-cps (car ls) (lambda (v) (if v (filter-cps pred-cps (cdr ls) k) (filter-cps pred-cps (cdr ls) (lambda (v) (k (cons (car ls) v)))))))))) (define compose-cps (lambda (f-cps g-cps k1) (k1 (lambda (x k2) (g-cps x (lambda (v) (f-cps v k2))))))) (define depth-cps (lambda (ls k) (cond [(null? ls) (k 1)] [(not (pair? (car ls))) (depth-cps (cdr ls) k)] [else (depth-cps (car ls) (lambda (v1) (let ([head (add1 v1)]) (depth-cps (cdr ls) (lambda (v2) (let ([tail v2]) (if (< head tail) (k tail) (k head))))))))])))