ン(ん)をそと発音する.
気をつけた方が良い.
「プログラミングClojure 第2版 Stuart 川合訳」
(defn gcd [x y]
(if (< x y) (gcd y x)
(let [r (mod x y)]
(if (zero? r) y (recur y r)))))
(defn so [x y z]
(and (= (gcd x y) 1)
(= (gcd y z) 1)))
(def pyts
(for [c (iterate inc 3)
b (range 1 c)
a (range 1 b)
:when (= (+ (* a a) (* b b)) (* c c))
:when (so a b c)
]
[a b c]))
clojureは再帰を使うよりも遅延シーケンスで表現する方がいいって本にあって. じゃあgcd
で、 [x, y, x%y, ..., 0]
みたいなシーケンスが作れれば例えば最後から二つ目の要素が答えになる みたいな解き方もありそうだけど、iterate
は無限シーケンスだし、 何を再帰を使わずにこんなシーケンスはどうやって作るんだろう. シーケンスの終わりの代わりにnil
を使っちゃって、その一つ手前までを見るとか. 気持ち悪いから絶対嫌だ.
あと、三つの数の互いに素って、二つの関係を見れば十分だっけ?十分な気がする.