This is my Clojure solution to Chapter 1, Exercise 17:
(ns sicp.ch1.ex17)
(defn multiply
[a b]
(if (zero? b)
0
(+ a (multiply a (dec b)))))
(multiply 5 8) ; => 40
(defn double-it
[n]
(* 2 n))
(defn halve-it
[n]
(/ n 2))
(defn fast-multiply
[a b]
(cond (zero? b) 0
(= b 1) a
(even? b) (double-it (fast-multiply a (halve-it b)))
:else (+ a (fast-multiply a (dec b)))))
(fast-multiply 5 8) ; => 40
(every? #(= (apply multiply %) (apply fast-multiply %))
(for [i (range 10) j (range 10)] [i j])) ; => true
(ns sicp.ch1.ex17)
(defn multiply
[a b]
(if (zero? b)
0
(+ a (multiply a (dec b)))))
(multiply 5 8) ; => 40
(defn double-it
[n]
(* 2 n))
(defn halve-it
[n]
(/ n 2))
(defn fast-multiply
[a b]
(cond (zero? b) 0
(= b 1) a
(even? b) (double-it (fast-multiply a (halve-it b)))
:else (+ a (fast-multiply a (dec b)))))
(fast-multiply 5 8) ; => 40
(every? #(= (apply multiply %) (apply fast-multiply %))
(for [i (range 10) j (range 10)] [i j])) ; => true
No comments:
Post a Comment