遅延シーケンスでFizzBuzz

(defn cycle-pattern [n s]
  (lazy-cat (take (dec n) (repeat "")) [s]))

(def fizz-seq (cycle (cycle-pattern 3 "fizz")))

(def buzz-seq (cycle (cycle-pattern 5 "buzz")))

(def fizzbuzz-seq
     (->> (map str fizz-seq buzz-seq)
	  (map #(if (empty? %2) %1 %2) (iterate inc 1))))
(doall (take 100 fizzbuzz-seq))
 ;=> (1 2 "fizz" 4 "buzz" "fizz" 7 8 "fizz" "buzz" 11 "fizz" 13 14 "fizzbuzz" 16 17 "fizz" 19 "buzz" ...)

(nth fizzbuzz-seq 100004)
 ;=> "fizzbuzz"

メモ化も働きます。

ところで

cycle-pattern をもっと簡単に書けないだろうか? pythonなら

from itertools import cycle
fizz_seq = cycle([""]*2 + ["fuzz"])
buzz_seq = cycle([""]*4 + ["buzz"])

これでできてしまうのだが。