]> git.rkrishnan.org Git - sicp.git/blob - src/sicp/ex2_2.clj
Solution to 4.30. Extremely enlightening!
[sicp.git] / src / sicp / ex2_2.clj
1 (ns sicp.ex2_2
2   (:use [sicp utils]
3         [clojure.test]))
4
5 (defn make-segment [x y]
6   (list x y))
7
8 (defn start-segment [seg]
9   (first seg))
10
11 (defn end-segment [seg]
12   (first (rest seg)))
13
14 (defn make-point [x y]
15   (list x y))
16
17 (defn x-point [p]
18   (first p))
19
20 (defn y-point [p]
21   (first (rest p)))
22
23 (defn midpoint-segment [seg]
24   (let [x1 (x-point (start-segment seg))
25         y1 (y-point (start-segment seg))
26         x2 (x-point (end-segment seg))
27         y2 (y-point (end-segment seg))]
28     (make-point (average x1 x2)
29                 (average y1 y2))))
30
31
32 (deftest test-mid-point-1-1-3-3
33   (let [m (midpoint-segment (make-segment  (make-point 1 1)
34                                            (make-point 3 3)))]
35     (are [x y] [approx-equal x y]
36          (x-point m) 2.0
37          (y-point m) 2.0)))