Given the following:
; map : (X -> Y) list-of-X -> list-of-Y (define (map f l) (foldr (uncurry (compose (curry cons) f)) empty l)) ; uncurry : (X -> (Y -> Z)) -> (X Y -> Z) (define (uncurry f) (lambda (v1 v2) ((f v1) v2))) ; compose (Y -> Z) (X ->Y) -> (X -> Z)) (define (compose f g) (lambda (x) (f (g x)))) ; curry : (X Y -> Z) -> (X -> (Y -> Z)) (define (curry f) (lambda (v1) (lambda (v2) (f v1 v2)))) ; foldr : (X Y -> Y) list-of-X -> Y (define (foldr COMB base l) (cond [(empty? l) base] [(cons? l) (COMB (first l) (foldr COMB base (rest l)))]))show evaluations steps for
(map add1 (cons 1 empty))to produce
(cons 2 empty)
Last update: Friday, February 6th, 2004mflatt@cs.utah.edu |