2010/10/16

運動会なのではやくなるおまじない

今日は娘の小学校の運動会だったので、はやくなるおまじないを唱える。

CL-USER> (defmacro はやくなるおまじない (f)
`(define-compiler-macro ,f (&whole form &rest args)
(if (every #'constantp args)
(apply #',f args)
form)))
はやくなるおまじない
CL-USER> (defun fib (n)
(if (<= n 2)
1
(+ (fib (1- n))
(fib (- n 2)))))
FIB
CL-USER> (time (fib 40))
Evaluation took:
5.201 seconds of real time
5.172323 seconds of total run time (5.168323 user, 0.004000 system)
99.44% CPU
9,338,722,200 processor cycles
37,024 bytes consed

102334155
CL-USER> (はやくなるおまじない fib)
FIB
CL-USER> (time (fib 40))
Evaluation took:
0.000 seconds of real time
0.000000 seconds of total run time (0.000000 user, 0.000000 system)
100.00% CPU
972 processor cycles
0 bytes consed

102334155

2回目の (time (fib 40)) では 0.000 seconds of real time になってる。ちゃんとはやくなったね。

というのは嘘で、実際は time が実行される前のコンパイル段階で5秒以上かかっている。

娘もかけっこでは4番だった。でも、楽しそうでよかったよ。

いや、3番だったみたい。

0 件のコメント: