Topics to know:
Below is code from review during class
(require (lib "trace.ss")) ; for testing only (define (square x) (* x x)) (define (1+ x) (+ x 1)) (define (2+ x) (+ x 2)) (define (identity x) x) (define (acc2 combiner id term a next b) (acc-iter combiner id term a next b)) (define (acc-iter combiner result term a next b) (cond ((> a b) result) (else (acc-iter combiner (combiner (term a) result) term (next a) next b)))) ; (trace acc-iter) ; (trace accumulate) (define (double f) (lambda (x) (f (f x)))) ;(double 1+) --> (lambda (x) (1+ (1+ x))) ;(double double) --> (lambda (x) (double (double x))) ;(double (double double)) --> ; (lambda (x) ((double double) ((double double) x))) ;(define (f g) ; (g 2)) ; f(g(x)) (define (compose f g) (lambda (x) (f (g x)))) ; repeated (two different ways) (define (repeated f n) (lambda (x) (cond ((= n 0) x) (else ((compose f (repeated f (- n 1))) x))))) (define (repeated f n) (lambda (x) (cond ((= n 0) x) (else ((repeated f (- n 1)) (f x)))))) ; pi/4: product, pi-term (define (accumulate combiner id term a next b) (cond ((> a b) id) (else (combiner (term a) (accumulate combiner id term (next a) next b))))) (define (product term a next b) (accumulate * 1 term a next b)) (define (pi-term n) (cond ((odd? n) (/ (+ n 1) (+ n 2))) (else (/ (+ n 2) (+ n 1))))) (define (pi/4 terms) (product pi-term 1 1+ terms)) (define (pi terms) ; Floating point nice for display purposes (* 4. (pi/4 terms))) ; An interval abstraction (define make-interval cons) (define lower car) (define upper cdr) ; Another interval abstraction (define (make-interval lower upper) (lambda (msg) (cond ((eq? msg 0) lower) ((eq? msg 1) upper)))) (define (lower interval) (interval 0)) (define (upper interval) (interval 1)) ; Bottom line: Use lower and upper. They work. No guarantees about ; how they are written though!