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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください