From 7562b4d3d13bdd0d3991651f19ae1747d088258e Mon Sep 17 00:00:00 2001 From: Ramakrishnan Muthukrishnan <vu3rdd@gmail.com> Date: Sun, 30 May 2010 08:36:07 +0530 Subject: [PATCH] solution to 1.46 --- src/sicp/ex1_46.clj | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/sicp/ex1_46.clj diff --git a/src/sicp/ex1_46.clj b/src/sicp/ex1_46.clj new file mode 100644 index 0000000..0cf3d0c --- /dev/null +++ b/src/sicp/ex1_46.clj @@ -0,0 +1,33 @@ +(ns sicp.ex1_46 + (:use [clojure.contrib test-is] + [sicp utils])) + +(defn iterative-improve [good-enough-fn? improve-guess-fn] + (fn [guess] + (let [new-guess (improve-guess-fn guess)] + (if (good-enough-fn? guess new-guess) + new-guess + (recur new-guess))))) + +(defn sqrt [x] + (let [initial-guess 1.0] + ((iterative-improve + (fn [old new] (< (Math/abs (- old new)) 0.00001)) + (fn [guess] (average guess x))) + initial-guess))) + +(defn fixed-point [f initial-guess] + ((iterative-improve + (fn [old new] (< (Math/abs (- old new)) 0.00001)) + f) initial-guess)) + +(comment +(sqrt 4) +;;=> 3.9999942779541016 +user> (sqrt (* 2 2)) +;;=> 3.9999942779541016 +user> (fixed-point #(Math/cos %) 1.0) +;;=> 0.7390822985224024 +user> (fixed-point #(+ (Math/cos %) (Math/sin %)) 1.0) +;;=> 1.2587315962971173 +) \ No newline at end of file -- 2.45.2