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