Purple で FizzBuzz

PurpleFizzBuzz を書くとこんな感じです。

(def fizzbuzz (n)
  (match [(% n 3) (% n 5)]
    (0 0) "fizzbuzz"
    (0 _) "fizz"
    (_ 0) "buzz"
    _ n))

(->> (range 1 31) (map fizzbuzz) tuple print)

->> は Clojure のスレッディングマクロ(のひとつ)と同じです。

(->> a (b c) f g) は (g (f (b c a))) を意味するので、

(->> (range 1 31) (map fizzbuzz) tuple print)

(print (tuple (map fizzbuzz (range 1 31))))

を意味します。

map関数はイテレータを返すので、tuple関数によりタプルに変換してからprintしています。

上記の FizzBuzz はこちらのページに記載されているコードを参考にしました。