Report abuse

Clojure

(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

def sqrt(x)
  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)