From: Ramakrishnan Muthukrishnan <vu3rdd@gmail.com>
Date: Fri, 9 Apr 2010 13:37:38 +0000 (+0530)
Subject: Adding solution to 1.17.
X-Git-Url: https://git.rkrishnan.org/pf/content/en/footer/frontends/module-simplejson._speedups.html?a=commitdiff_plain;h=59bdd64b183c491b181d0b3f2a63f8758ed4fd0b;p=sicp.git

Adding solution to 1.17.
---

diff --git a/chapter1/ch1_2.clj b/chapter1/ch1_2.clj
index d6bb552..ed57832 100644
--- a/chapter1/ch1_2.clj
+++ b/chapter1/ch1_2.clj
@@ -491,3 +491,23 @@ TRACE t2494: => -0.39980345741334
 	(even? n) (expt-iter (square b) (/ n 2) a)
 	:else (expt-iter b (- n 1) (* a b))))
 
+;; exercise 1.17:
+(defn mult [a b]
+  (if (= b 0)
+    0
+    (+ a (mult a (- b 1)))))
+
+;; product = 2 * (a * (b/2)) for even b
+;;         = a    + (a * (b - 1)) for odd b
+(defn fast-mult [a b]
+  (cond (= b 0) 0
+	(= b 1) a
+	(even? b) (twice (fast-mult a (half b)))
+	:else (+ a (fast-mult a (- b 1)))))
+
+;; double
+(defn twice [x]
+  (* 2 x))
+
+(defn half [x]
+  (/ x 2))
\ No newline at end of file