From 967523eeb5c71d134937fb6b58e668d4dd5041c1 Mon Sep 17 00:00:00 2001 From: Ramakrishnan Muthukrishnan <vu3rdd@gmail.com> Date: Wed, 5 May 2010 18:41:29 +0530 Subject: [PATCH] some minor re-arrangements --- src/sicp/ex1_32.clj | 12 ++++++------ src/sicp/utils.clj | 21 ++++++++++++++++++++- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/sicp/ex1_32.clj b/src/sicp/ex1_32.clj index 369b677..a2fc28b 100644 --- a/src/sicp/ex1_32.clj +++ b/src/sicp/ex1_32.clj @@ -22,6 +22,12 @@ 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))))) @@ -31,12 +37,6 @@ (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))))) diff --git a/src/sicp/utils.clj b/src/sicp/utils.clj index 6ebbe24..0ee9355 100644 --- a/src/sicp/utils.clj +++ b/src/sicp/utils.clj @@ -2,7 +2,7 @@ (defn square [x] (* x x)) -(defn myabs +(defn abs "find absolute value of x" [x] (if (< x 0) (- x) x)) @@ -16,6 +16,25 @@ (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. -- 2.45.2