LISPでFizzBuzz
ふと FizzBuzz を LISP 的に書くとどうなるんだろうと思って調べてみた。 ループで書くのは LISP 的にはダサいはず(適当)なので末尾再帰とかだろうかと 思っていたら,1 から 100 までのリストを作って map していくという感じらしい。 ほんまか?
(letrec ((print-all
(lambda (l)
(when (pair? l)
(print (car l))
(print-all (cdr l))))))
(print-all
(map
(lambda (n)
(cond ((= (remainder n 15) 0) "FizzBuzz")
((= (remainder n 3) 0) "Fizz")
((= (remainder n 5) 0) "Buzz")
(else (number->string n))))
(iota 100 1))))