Mon Feb 17 15:12:51 JST 2014

ン(ん)をそと発音する.

気をつけた方が良い.

Mon Feb 17 19:23:01 JST 2014

「プログラミング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を使っちゃって、その一つ手前までを見るとか. 気持ち悪いから絶対嫌だ.

あと、三つの数の互いに素って、二つの関係を見れば十分だっけ?十分な気がする.