some minor re-arrangements
authorRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Wed, 5 May 2010 13:11:29 +0000 (18:41 +0530)
committerRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Wed, 5 May 2010 13:11:29 +0000 (18:41 +0530)
src/sicp/ex1_32.clj
src/sicp/utils.clj

index 369b67768c57e83605895a850a46db5cc7ed1704..a2fc28bf9837d4a1a8d854681107ec839d757527 100644 (file)
     result
     (iter combiner null-value term (next a) next b (combiner (term a) result))))
 
+(def isum (fn [a b] (iaccumulate + 0 identity a inc b)))
+
+(def isum-cube (fn [a b] (iaccumulate + 0 cube a inc b)))
+
+(def iprod (fn [a b] (iaccumulate * 1 identity a inc b)))
+
 (deftest test-sum-of-integers-from-1-to-10
   (is (= (sum 1 10) (reduce + (range 1 11)))))
 
 (deftest test-prod-of-ints-from-1-to-10
   (is (= (prod 1 10) (reduce * (range 1 11)))))
 
-(def isum (fn [a b] (iaccumulate + 0 identity a inc b)))
-
-(def isum-cube (fn [a b] (iaccumulate + 0 cube a inc b)))
-
-(def iprod (fn [a b] (iaccumulate * 1 identity a inc b)))
-
 (deftest test-isum-of-integers-from-1-to-10
   (is (= (isum 1 10) (reduce + (range 1 11)))))
 
index 6ebbe2463555d06e18709a7cc9ca27ee2618233e..0ee935586625aaf8ad82072126f76d09b7156cfa 100644 (file)
@@ -2,7 +2,7 @@
 
 (defn square [x] (* x x))
 
-(defn myabs
+(defn abs
   "find absolute value of x"
   [x]
   (if (< x 0) (- x) x))
 (defn half [x]
   (/ x 2))
 
+(defn divides? [a b]
+  (= (rem b a) 0))
+
+(defn- find-divisor [n test-divisor]
+  (cond (> (square test-divisor)  n) n
+       (divides? test-divisor n) test-divisor
+       :else (find-divisor n (inc test-divisor))))
+
+(defn- smallest-divisor [n]
+  (find-divisor n 2))
+
+(defn prime? [n]
+  (= (smallest-divisor n) n))
+
+(defn gcd [a b]
+  (if (= b 0)
+    a
+    (gcd b (rem a b))))
+
 (defmacro microbench
   " Evaluates the expression n number of times, returning the average
     time spent in computation, removing highest and lowest values.