GaucheでFizzBuzzその2

前に作ったFizzBuzzをもうちょっとSchemeぽくしてみる.
以前は「関数型言語再帰呼び出し」と思ってたので,再帰呼び出しで実装したけど,mapとか使えばさらにすっきり書ける.

というわけで.

#!/usr/bin/env gosh

(use srfi-1)

(define (fizzbuzz max)
 (map (lambda (x)
	   (cond
		[(= (modulo x 15) 0 ) "FizzBuzz"]
		[(= (modulo x 3) 0 ) "Fizz"]
		[(= (modulo x 5) 0 ) "Buzz"]
		[else x]
		)
	  )
  (iota max 1)
  )
 )

(define (main args)
 (print (fizzbuzz 30))
 )

1から始まるmax個のリストをiotaで作り,それの各要素に対してmapでlambda式を適用していっている.