This is my Clojure solution to Chapter 1, Exercise 6:
(ns sicp.ch1.ex06)
(defn good-enough?
[guess x]
(< (Math/abs (- (Math/pow guess 2) x)) 0.001))
(defn average
[x y]
(/ (+ x y) 2))
(defn improve
[guess x]
(average guess (/ x guess)))
(defn sqrt-iter
[guess x]
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
(double (sqrt-iter 1 2)) ; => 1.41421568627451
(defn new-if
[predicate then-clause else-clause]
(cond predicate then-clause
:else else-clause))
(new-if (= 2 3) 0 5) ; => 5
(new-if (= 1 1) 0 5) ; => 0
(defn new-sqrt-iter
[guess x]
(new-if (good-enough? guess x)
guess
(new-sqrt-iter (improve guess x)
x)))
(new-sqrt-iter 1 2) ; => infinite loop
(ns sicp.ch1.ex06)
(defn good-enough?
[guess x]
(< (Math/abs (- (Math/pow guess 2) x)) 0.001))
(defn average
[x y]
(/ (+ x y) 2))
(defn improve
[guess x]
(average guess (/ x guess)))
(defn sqrt-iter
[guess x]
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
(double (sqrt-iter 1 2)) ; => 1.41421568627451
(defn new-if
[predicate then-clause else-clause]
(cond predicate then-clause
:else else-clause))
(new-if (= 2 3) 0 5) ; => 5
(new-if (= 1 1) 0 5) ; => 0
(defn new-sqrt-iter
[guess x]
(new-if (good-enough? guess x)
guess
(new-sqrt-iter (improve guess x)
x)))
(new-sqrt-iter 1 2) ; => infinite loop
No comments:
Post a Comment