運動会なのではやくなるおまじない
今日は娘の小学校の運動会だったので、はやくなるおまじないを唱える。
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 件のコメント:
コメントを投稿