]> git.rkrishnan.org Git - sicp.git/commitdiff
Added solution to 1.16.
authorRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Fri, 9 Apr 2010 10:04:48 +0000 (15:34 +0530)
committerRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Fri, 9 Apr 2010 10:04:48 +0000 (15:34 +0530)
chapter1/ch1_2.clj

index 89ccec5724b40e08704d0f3677d3beed4d5977c8..d6bb552e34c09ab6b3dff6fbfc4828e6748cdca2 100644 (file)
@@ -478,3 +478,16 @@ TRACE t2494: => -0.39980345741334
 
 (defn even? [x]
   (= (rem x 2) 0))
+
+(defn square [x]
+  (* x x))
+
+;; exercise 1.16:
+(defn expt [b n]
+  (expt-iter b n 1))
+
+(defn expt-iter [b n a]
+  (cond (= n 0) a
+       (even? n) (expt-iter (square b) (/ n 2) a)
+       :else (expt-iter b (- n 1) (* a b))))
+