20 Days of Clojure: Day 4
04-Mar-2008 Filed in: Software
Development | 20 Days of
Clojure
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))
(clojure day (March 20) in Northampton, MA is coming soon)
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))
(clojure day (March 20) in Northampton, MA is coming soon)