Clojure
1 2 3 4 5 6 7 8 9 10 |
(defn sqrt [x] (let [square (fn [a] (* a a)) average (fn [a b] (/ (+ a b) 2)) good-enough? (fn [a] (< (Math/abs (- (square a) x)) 0.001)) improve (fn [a] (average a (/ x a))) sqrt-iter (fn sqrt-iter [a] (if (good-enough? a) a (sqrt-iter (improve a))))] (sqrt-iter 1.0))) (println (sqrt 9)) |
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 |
square = lambda {|a| a * a } average = lambda {|a,b| (a + b)/2.0 } is_good_enough = lambda {|a| (square[a] - x).abs < 0.001 } improve = lambda {|a| average[a, x/a] } sqrt_iter = lambda {|a| is_good_enough[a] ? a : sqrt_iter[improve[a]] } sqrt_iter[1.0] end p sqrt(9) |

