LISP

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))))