(defn accumulate-iter [comb null-val term next a b] (defn iter [a result] (if (> a b) result (iter (next a) (comb (term a) result)))) (iter a null-val)) (defn accumulate-recur [comb null-val term next a b] (if (> a b) null-val (comb (term a) (accumulate-recur comb null-val term next (next a) b)))) (defn add [a b] (+ a b)) (defn mult [a b] (* a b)) (defn id [n] n) (defn inc [n] (+ n 1)) (defn sum [a b] (accumulate-recur add 0 id inc a b)) (defn factorial [a b] (accumulate-recur mult 1 id inc a b)) (var x 1) (while (< x 10) (printf "n=%d, sum 1-n: %d, factorial 1-n: %d" x (sum 1 x) (factorial 1 x)) (set x (+ x 1)))