]> git.rkrishnan.org Git - sicp.git/blob - src/sicp/ch1_3.clj
namespace confusions resolved.
[sicp.git] / src / sicp / ch1_3.clj
1
2 (ns sicp.ch1-3
3   (:use [sicp utils]
4         [clojure.contrib test-is]))
5
6 ;; 1.3.1: Procedures as arguments
7 (defn sum-integers [a b]
8   (if (> a b)
9     0
10     (+ a (sum-integers (+ a 1) b))))
11
12 (defn sum-cubes [a b]
13   (if (> a b)
14     0
15     (+ (cube a) (sum-cubes (+ a 1) b))))
16
17 (defn pi-sum [a b]
18   (if (> a b)
19     0
20     (+ (/ 1.0 (* a (+ a 2))) (pi-sum (+ a 1) b))))
21
22 (defn sum [term a next b]
23   (if (> a b)
24     0
25     (+ (term a)
26        (sum term (next a) next b))))
27
28 (def sum-cubes-new (fn[a b] (sum cube a inc b)))
29
30 (deftest test-sum-of-first-10-integers
31   (is (sum #(identity %) 1 inc 10) 55))
32
33 ;; (* (sum #(/ 1.0 (* % (+ % 2))) 1 #(+ % 4) 1000) 8)
34 ;;=> 3.139592655589783  (approaches PI)
35
36 (defn integral [f a b dx]
37   (* (sum f (+ a (/ dx 2)) #(+ % dx) b)
38      dx))
39
40 (integral cube 0 1 0.001)
41 ;;=>0.249999875000001
42 (integral cube 0 1 0.005)
43 ;;=>0.24999687500000028