|
ToDo:
|
Rustづいていたが並行してClojureも勉強するので計算機プログラムの構造と解釈 第2版を読んでいます。
ニュートン法で平方根を求めるのです。
iterateとlazy-seqでそれぞれ遅延評価を使っています。
修正しました。第一引数が有効数で第二引数が平方根で求める値です。初期値は1.で固定です。*1
(ns newton.core
(:gen-class))
(defn newton[[x y]]
(cons x (lazy-seq (newton [(/ (+' (/ y x) x ) 2) y]))))
(defn -main[& args]
(do
(println
(first
(first
(first
(filter
#(< (Math/abs (- (first (first %) ) (first (second %)))) (Float/parseFloat (first args)))
(partition 2 1
(iterate
(fn [[x y]] [(/ (+' (/ y x) x ) 2) y] ) [1. (Integer/parseInt (second args))])))))))
(println
(first
(first
(filter
#(< (Math/abs (- (first %) (second %))) (Float/parseFloat (first args)))
(partition 2 1 (newton [1. (Integer/parseInt (second args))]) )))))))
*1 8/23修正