fizzbuzz.scm added by sbwhitecap on Sun Mar 22 06:46:38 2015

#!/bin/sh
#|
exec csi -s "$0" "$@"
|#

(require-extension srfi-1)
(require-extension srfi-13)

(define divisible? 
  (lambda (d n)
    (= (modulo n d) 0)))

(define fizz
  (lambda (n)
    (if (divisible? 3 n)
      "Fizz"
      "")))

(define buzz
  (lambda (n)
    (if (divisible? 5 n)
      "Buzz"
      "")))

(define zz
  (lambda (d str n)
    (if (divisible? d n)
      str
      "")))

(define integer->fizzbuzz
  (lambda (n)
    (let ((result (string-concatenate
                   (list (zz 3 "Fizz" n) (zz 5 "Buzz" n)))))
      (if (string= result "")
        (number->string n)
        result))))

(define fizzbuzz
  (lambda ()
    (map (lambda (n)
	   (display n)
	   (newline))
	 (map integer->fizzbuzz
              (cdr (iota 50))))))

(define main
  (lambda (args)
    (fizzbuzz)))

#|
/* vim: set tabstop=2 shiftwidth=2 expandtab */
|#