(define left-section (lambda (f left) (lambda (right) (f left right)))) (define compose (lambda (f g) (lambda (x) (f (g x))))) (define increment (left-section + 1)) (define square (lambda (x) (* x x))) (define update1 (left-section map (compose increment square))) (define update2 (lambda (ls) (map (compose increment square) ls))) (define update3 (lambda (ls) (map (lambda (x) (increment (square (x)))) ls))) (define update4 (let ((f (lambda (x) (increment (square x))))) (lambda (ls) (map f ls)))) (define update5 (lambda (ls) (let ((f (lambda (x) (increment (square x))))) (map f ls)))) (define update6 (lambda (ls) (if (null? ls) '() (cons (increment (square (car ls))) (update6 (cdr ls)))))) ;;;; (define iota (lambda (x) (if (zero? x) '() (append (iota (- x 1)) (list x) )))) (define mapiota (lambda (f n) (map f (iota n)))) (define squaresTo (lambda (n) (mapiota (lambda (x) (expt x 2)) n))) (define cubesTo (lambda (n) (mapiota (lambda (x) (expt x 3)) n))) (define twosTo (lambda (n) (mapiota (lambda (x) (expt 2 x)) n)))