Continuing from yesterday, we made our first function that takes a function and returns a function. Go to 43:00 in this video to see why (you can stop at 54:00):
In this example, we take the first-order functions idea further and define a derivative function (that takes and returns functions) and a newton function (which takes a function and uses fixed-point). Here it is in clojure (you can find fixed-point and other functions in yesterday’s post):
(defn square [x] (* x x))
(defn deriv [f]
(let [dx 0.000001]
(fn [x] (/ (- (f (+ x dx)) (f x)) dx))))
(defn newton [f guess]
(let [df (deriv f)]
(fixed-point (fn [x] (- x (/ (f x) (df x)))) guess)))
(defn sqrt [x] (newton (fn [y] (- x (square y))) 1))