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