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))