遅延シーケンスでfizzbuzz

ブログに書くようなマトモなネタがなく、また放置気味になってるので、仕事の辛さについ現実逃避したコードとか挙げとく。

(defn- fb
  "convert num to FizzBuzz string"
  [x]
  (let [fbstr (str (if (zero? (rem x 3)) "Fizz" "")
                   (if (zero? (rem x 5)) "Buzz" ""))]
    (if (= "" fbstr) (str x) fbstr)))

(defn fizzbuzz-seq
  "returns the seq of FizzBuzz string"
  []
  (map fb (drop 1 (range))))

(defn fizzbuzz
  "prints FizzBuzz strings at each line"
  [x]
  (doseq [s (take x (fizzbuzz-seq))] (println s)))

遅延シーケンス面白いね。