]> git.rkrishnan.org Git - sicp.git/commitdiff
Section 2.1 rational number examples
authorRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Mon, 7 Jun 2010 11:02:59 +0000 (16:32 +0530)
committerRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Mon, 7 Jun 2010 11:02:59 +0000 (16:32 +0530)
src/sicp/ch2_1.clj [new file with mode: 0644]

diff --git a/src/sicp/ch2_1.clj b/src/sicp/ch2_1.clj
new file mode 100644 (file)
index 0000000..9063e98
--- /dev/null
@@ -0,0 +1,43 @@
+(ns sicp.ch2_1
+  (:use [sicp utils]
+       [clojure.contrib test-is]))
+
+(declare make-rat numer denom)
+
+(defn add-rat [x y]
+  (make-rat (+ (* (numer x) (denom y))
+              (* (numer y) (denom x)))
+           (* (denom x) (denom y))))
+
+(defn sub-rat [x y]
+  (make-rat (- (* (numer x) (denom y))
+              (* (numer y) (denom x)))
+           (* (denom x) (denom y))))
+
+(defn mul-rat [x y]
+  (make-rat (* (numer x) (numer y))
+           (* (denom x) (denom y))))
+
+(defn div-rat [x y]
+  (make-rat (* (numer x) (denom y))
+           (* (numer y) (denom x))))
+
+(defn equal-rat? [x y]
+  (= (* (numer x) (denom y))
+     (* (denom x) (numer y))))
+
+;; until now, we haven't even defined the data representation.
+;; now define make-rat numer and denom.
+(defn make-rat [x y]
+  (let [g (gcd x y)]
+    (list (/ x g)
+         (/ y g))))
+
+(defn numer [x]
+  (first x))
+
+(defn denom [x]
+  (first (rest x)))
+
+(defn print-rat [x]
+  (println (numer x)"/"(denom x)))
\ No newline at end of file