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)))))
(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.