とりあえず素直に書き下してみた

http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm
なんかすげー冗長な気がするけど。どうやったらかっこよくなるんだろう

(define (Fizz-Buzz n)
  (define (rev n)
    (if (= n 0) '()
        (cond ((and (= (remainder n 3) 0) (= (remainder n 5) 0))
               (cons 'FizzBuzz (rev (- n 1)) ))
              ((= (remainder n 3) 0)
               (cons 'Fizz (rev (- n 1))))
              ((= (remainder n 5) 0)
               (cons 'Buzz (rev (- n 1))))
              (else
               (cons n (rev (- n 1)))))))
  (reverse (rev n)))

(Fizz-Buzz 100)

追記:末尾再帰のほうがシンプルになった。まだ長いけど

(define (Fizz-Buzz n)
  (define (iter n a)
    (if (= n 0) a
        (cond ((= (remainder n 15) 0)
               (iter (- n 1) (cons 'FizzBuzz a)))
              ((= (remainder n 3) 0)
               (iter (- n 1) (cons 'Fizz a)))
              ((= (remainder n 5) 0)
               (iter (- n 1) (cons 'Buzz a)))
              (else
               (iter (- n 1) (cons n a))))))
  (iter n '()))

(Fizz-Buzz 100)

ワンライナーw

((lambda (n) (define (iter n a) (if (= n 0) a (cond ((= (remainder n 15) 0)
(iter (- n 1) (cons 'FizzBuzz a))) ((= (remainder n 3) 0) (iter (- n 1)
(cons 'Fizz a))) ((= (remainder n 5) 0) (iter (- n 1) (cons 'Buzz a))) 
(else (iter (- n 1) (cons n a)))))) (iter n '())) 100)

佐野さんの添削により改良

((lambda (n) (define (i n a) (if (= n 0) a (i (- n 1) (cond ((= (remainder
 n 15) 0) (cons 'FizzBuzz a)) ((= (remainder n 3) 0) (cons 'Fizz a)) 
((= (remainder n 5) 0) (cons 'Buzz a)) (else (cons n a)))))) (i n '())) 100)