diff --git a/sicp-ex-1.32.rkt b/sicp-ex-1.32.rkt new file mode 100644 index 0000000..a0420b6 --- /dev/null +++ b/sicp-ex-1.32.rkt @@ -0,0 +1,35 @@ +#! /usr/bin/racket +#lang racket/base + +(define (accumulate-iter combiner null-value term a next b) + (define (iter a result) + (if (> a b) + result + (iter (next a) (combiner (term a) result)))) + (iter a null-value)) + +(define (product-iter term a next b) + (accumulate-iter * 1 term a next b)) + +(define (sum-iter term a next b) + (accumulate-iter + 0 term a next b)) + +(sum-iter (lambda (x) x) 1 (lambda (x) (+ x 1)) 4) +(product-iter (lambda (x) x) 1 (lambda (x) (+ x 1)) 4) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define (accumulate-recur combiner null-value term a next b) + (if (> a b) + null-value + (combiner (term a) + (accumulate-recur combiner null-value term (next a) next b)))) + +(define (product-recur term a next b) + (accumulate-recur * 1 term a next b)) + +(define (sum-recur term a next b) + (accumulate-recur + 0 term a next b)) + +(sum-recur (lambda (x) x) 1 (lambda (x) (+ x 1)) 4) +(product-recur (lambda (x) x) 1 (lambda (x) (+ x 1)) 4) \ No newline at end of file