FizzBuzz in Clojure
Taking inspiration from this great post of fizzbuzz written in 10 languages, I have decided to write it in Clojure.
The basic version is pretty simple, and fairly similar to the on proposed in Haskell:
(defn fb? [c]
(cond
(= 0 (+ (rem c 3) (rem c 5))) "fizzbuzz"
(= 0 (rem c 3)) "fizz"
(= 0 (rem c 5)) "buzz"
:else c
)
)
(map fb? (range 1 16))
; (1 2 "fizz" 4 "buzz" "fizz" 7 8 "fizz" "buzz" 11 "fizz" 13 14 "fizzbuzz")
A more interesting version is one that uses lazy sequences:
(defn fb? [c]
(cond
(= 0 (+ (rem c 3) (rem c 5))) "fizzbuzz"
(= 0 (rem c 3)) "fizz"
(= 0 (rem c 5)) "buzz"
:else c
)
)
(defn lazyfb
([] (lazyfb 1))
([n] (lazy-seq (cons (fb? n) (lazyfb (inc n)))))
)
(take 15 (lazyfb))
; (1 2 "fizz" 4 "buzz" "fizz" 7 8 "fizz" "buzz" 11 "fizz" 13 14 "fizzbuzz")