僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
ので書いてみた。
Scheme のとあまり変らないけど。
#!/usr/bin/env clisp
(setf *print-circle* t)
(setq fizz '#1=(nil nil "fizz" . #1#))
(setq buzz '#1=(nil nil nil nil "buzz" . #1#))
(defun fizzbuzz (first last fi bu)
(cond
((eq (car bu) (car fi)) (princ first)))
(cond
((car fi) (princ (car fi))))
(cond
((car bu) (princ (car bu))))
(princ '#\newline)
(or
(eq first last)
(fizzbuzz (+ first 1) last
(cdr fi) (cdr bu))))
(fizzbuzz 1 100 fizz buzz)
末尾を、(fizzbuzz 1000 100 fizz buzz) で実行してみた。
すると、
fizzbuzz 6310 6311 fizz 6313 *** - Program stack overflow. RESET
(eq first last) より (> (+ 1 first) last) とかの方が安全かも。
first は (+ (* 15 n) 1) にしないと、ちゃんとした fizzbuzzにならないことに、今気づいた。
[70]> (fizzbuzz 5 20 fizz buzz) 5 6 fizz 8 buzz fizz 11 12 fizz buzz 15 fizz 17 18 fizzbuzz 20 T
対策は後で。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。