実践Common Lispを読んでみる5
- 作者: Peter Seibel,佐野匡俊,水丸淳,園城雅之,金子祐介
- 出版社/メーカー: オーム社
- 発売日: 2008/07/26
- メディア: 単行本(ソフトカバー)
- 購入: 8人 クリック: 192回
- この商品を含むブログ (69件) を見る
とうとうマクロ定義。
正直、まだよくわかっていないところがたくさんある。
以下、ソースコード。
(dolist (x '(1 2 3)) (print x)) (dolist (x '(1 2 3)) (print x) (if (evenp x) (return))) (dotimes (i 4) (print i)) (dotimes (x 20) (dotimes (y 20) (format t "~3d " (* (1+ x) (1+ y))))) (do ((n 0 (1+ n)) (cur 0 next) (next 1 (+ cur next))) ((= 10 n) cur) ; (format t "~3d" cur) ) (do ((i 0 (1+ i))) ((>= i 4)) (print i)) (do () ((> (get-universal-time) *some-future-date*)) (format t "Warning~%") (sleep 1)) (defvar *some-future-date* (+ 3446977325 (* 60 1))) (loop (when (> (get-universal-time) *some-future-date*) (return)) (format t "Waiting~%") (sleep 60)) (do ((nums nil) (i 1 (1+ i))) ((> i 10) (nreverse nums)) (push i nums) ; (print i) ) (loop for i from 1 to 10 collecting i) (loop for x from 1 to 10 summing (expt x 2)) (loop for x across "the quick brown fox jumps over the lazy dog" counting (find x "aeiou")) (loop for i below 10 and a = 0 then b and b = 1 then (+ b a) finally (return a)) (defun primep (number) (when (> number 1) (loop for fac from 2 to (isqrt number) never (zerop (mod number fac))))) (defun next-prime (number) (loop for n from number when (primep n) return n)) (do-primes (p 0 19) (format t "~d " p)) (do ((p (next-prime 0) (next-prime (1+ p)))) ((> p 19)) (format t "~d " p)) (defmacro do-primes (var-and-range &rest body) (let ((var (first var-and-range)) (start (second var-and-range)) (end (third var-and-range))) `(do ((,var (next-prime ,start) (next-prime (1+ ,var)))) ((> ,var ,end)) ,@body))) (defmacro do-primes ((var strat end) &body body) `(do ((,var (next-prime ,start) (next-prime (1+ ,var)))) ((> ,var ,end)) ,@body))
http://dl.getdropbox.com/u/228440/veleno-samples/lisp-samples/sample.lisp