trans = ->(i) { if i % 15 == 0 "FizzBuzz" elsif i % 3 == 0 "Fizz" elsif i % 5 == 0 "Buzz" else i.to_s end } fizzbuzz = ->(n) { generate = ->(i, ar) { return ar if i > n generate[i + 1, ar + [trans[i]]] } generate[1, []] } p fizzbuzz[50]
何でも再帰で書きたくなる病…。ちなみに、逐字的に Lisp に移植できると思います。
※参考
FizzBuzz問題(Ruby) - Camera Obscura
みんな大好き FizzBuzz(Ruby, Python) - Camera Obscura