FizzBuzz問題

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm

lispの練習のために、common lisp(clisp)でやってみた。

(defun fizz-buzz (num)
(labels
((convert (n)
(if (zerop (mod n 15))
"FizzBuzz"
(if (zerop (mod n 5))
"Buzz"
(if (zerop (mod n 3))
"Fizz"
n))))
(rec (n lst)
(if (zerop n)
lst
(rec (- n 1) (cons (convert n) lst)))))
(rec num nil)))

追記20070509:zerop関数を知った。0と=で比較するよりカッコイイので修正

以下、上の関数の結果を表示する処理。

(defun print-list (lst)
(if (null lst)
nil
(progn
(format t "~D~%" (car lst))
(print-list (cdr lst)))))
(print-list (fizz-buzz 100))

実は、ものすごく簡単に書けたりしちゃうんでしょうか?

書くのにものすごく時間がかかったのは秘密です。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください