; 4a (define (my-compose f g) (lambda (x) (f (g x))) ) ; 4b (define (curry f) (lambda (x) (lambda (y) (f x y))) ) ; 4c (define (uncurry f) (lambda (x y) ((f x) y)) ) ; 4d (define (eat-apples lst) (filter (my-compose not ((curry symbol=?) 'apple)) lst) ) (define (my-map f lst) ; The only one I couldn't figure out myself. (foldr (uncurry (my-compose (curry cons) f)) empty lst) ) (equal? ((my-compose add1 sqr) 2) 5) (equal? (((curry cons) 3) empty) (cons 3 empty)) (equal? ((uncurry (curry cons)) 3 empty) (cons 3 empty)) (equal? (eat-apples empty) empty) (equal? (eat-apples '(dsada apple dasgb qwewq czxa fa2 das apple apple aple)) '(dsada dasgb qwewq czxa fa2 das aple)) (equal? '(1 4 9 16) (my-map sqr '(1 2 3 4))) (equal? empty (my-map add1 empty)) (equal? '(3 6 9 12 15) (my-map (lambda (x) (* 3 x)) '(1 2 3 4 5)))