This is my Clojure solution to Chapter 1, Exercise 10:
(ns sicp.ch1.ex10)
(defn A
[x y]
(cond (zero? y) 0
(zero? x) (* 2 y)
(= y 1) 2
:else (A (dec x)
(A x (dec y)))))
(A 1 10) ; => 1024
(A 2 4) ; => 65536
(A 3 3) ; => 65536
(defn f
[n]
(A 0 n))
(defn g
[n]
(A 1 n))
(defn h
[n]
(A 2 n))
(every? #(= (* 2 %)
(f %))
(range 1 5)) ; => true -- f is multiplication
(every? #(= (Math/pow 2 %)
(double (g %)))
(range 1 5)) ; => true -- g is exponentiation
(every? (fn [i]
(= (nth (iterate #(Math/pow 2 %) 1) i)
(double (h i))))
(range 1 5)) ; => true -- h is iterated exponentiation or tetration
(ns sicp.ch1.ex10)
(defn A
[x y]
(cond (zero? y) 0
(zero? x) (* 2 y)
(= y 1) 2
:else (A (dec x)
(A x (dec y)))))
(A 1 10) ; => 1024
(A 2 4) ; => 65536
(A 3 3) ; => 65536
(defn f
[n]
(A 0 n))
(defn g
[n]
(A 1 n))
(defn h
[n]
(A 2 n))
(every? #(= (* 2 %)
(f %))
(range 1 5)) ; => true -- f is multiplication
(every? #(= (Math/pow 2 %)
(double (g %)))
(range 1 5)) ; => true -- g is exponentiation
(every? (fn [i]
(= (nth (iterate #(Math/pow 2 %) 1) i)
(double (h i))))
(range 1 5)) ; => true -- h is iterated exponentiation or tetration
No comments:
Post a Comment