プロジェクト・オイラーProblem1解いた
**** 追記 2011/11/28 答え載せてなかったし間違ってたので修正。problem1のloop中のnを(- n 1)に変更
プロジェクト•オイラーというものがあったのでちょっとだけ解いてみた。
Problem 1 - PukiWiki
使用言語はSBCL。いい加減Emacs Lisp以外を使おうというのが頭にあったのでとりあえず使えるSBCLを使った。あとloopを使ってみようかと思って使ってみた。
http://www.apl.jhu.edu/~hall/Lisp-Notes/Loop-Summary.html
微酔半壊: Common Lisp: loopマクロ用法抄
ループ - Common Lisp クックブック
loopはあんまり詳しい使い方を知らなくて苦戦した。そしてEmacs Lisp以外をあまり使っていなかったのでかなり苦戦した。importとかuse-packageとかはまた今度使う。
finallyキーワードはやっと使い方がわかったから良かった。少しずつloopマクロの使い方がわかってきてる。
loop部分は1000未満なのでnを-1してる。loopの最大はn-1ではないみたい。
(defun problem1 (n) (loop for i from 1 to (- n 1) with result = 0 do (setq result (+ (check-zerop-3-5 i) result)) finally (return result))) (defun check-zerop-3-5 (n) (cond ((zerop (mod n 3)) n) ((zerop (mod n 5)) n) (t 0)))
(problem1 1000) ;=> 233168