Thursday, June 11, 2020

SICP in Clojure: Chapter 1, Exercise 35

This is my Clojure solution to Chapter 1, Exercise 35:

(ns sicp.ch1.ex35)

;; x = 1 + 1 / x
;; x^2 = x + 1
;; x^2 - x - 1 = 0
;; => use quadratic formula

(def tolerance 0.00001)

(defn close-enough?
  [v1 v2]
  (< (Math/abs (double (- v1 v2))) tolerance))

(defn try-guess
  [f guess]
  (let [next-guess (f guess)]
    (if (close-enough? guess next-guess)
      next-guess
      (try-guess f next-guess))))

(defn fixed-point
  [f first-guess]
  (try-guess f first-guess))

(double (fixed-point #(inc (/ 1 %)) 1)) ; => 1.618032786885246

 

No comments: