From cb384b6b7e2e96e7bc44ef18327bd19d421bc59e Mon Sep 17 00:00:00 2001 From: Folkert Kevelam Date: Wed, 4 Jun 2025 11:11:47 +0200 Subject: [PATCH] Initial commit --- SICP/exercise_1_46.janet | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 SICP/exercise_1_46.janet diff --git a/SICP/exercise_1_46.janet b/SICP/exercise_1_46.janet new file mode 100644 index 0000000..785c5a1 --- /dev/null +++ b/SICP/exercise_1_46.janet @@ -0,0 +1,34 @@ +(defn iterative-improve [good-enough? next] + (fn [guess] + (defn iter [prev current] + (cond + (good-enough? prev current) current + (iter current (next current)))) + (iter guess (next guess)))) + +(def tolerance 0.0001) +(defn good-enough? [prev current] + (< (math/abs (- prev current)) + tolerance)) + +(defn improve-sqrt [x] + (fn [y] (/ x y))) + +(defn average-damp [f] + (fn [x] (* 0.5 (+ x (f x))))) + +(defn improve [x] (average-damp (improve-sqrt x))) + +(defn sqrt [x] + (def run (iterative-improve good-enough? (improve x))) + (run 1.0)) + +(defn fixed-point [f initial-guess] + (def run (iterative-improve good-enough? f)) + (run initial-guess)) + +(defn fix-sqrt [x] + (fixed-point (improve x) 1.0)) + +(print (sqrt 5.0)) +(print (fix-sqrt 5.0)) \ No newline at end of file