空想犬猫記

※当日記では、犬も猫も空想も扱っておりません。(旧・エト記)

フィボナッチ数を計算する

…イヤ,そんなことは,始めから,わかっていたことだ。末尾呼び出しの最適化のない etolisp には無理だろうってことくらい。sbcl にだって,無いんだから。いいじゃないか。そんなところで勝負したって,詮無いことだ。

(defun fib (n) (if (< n 2) n (+ (fib (- n 1)) (fib (- n 2)))))
(fib 25)

SBCLだと2秒くらい。エテ公で実際にやってみたらどうなるのか,恐る恐る試してみた。

% time ../src/etolisp fib.lisp
GC::collect() begin... (node=1461090)
1460409 nodes (16771KB) are deleted.
GC::collect() end. (node=681)
GC::collect() begin... (node=1461621)
1460960 nodes (16777KB) are deleted.
GC::collect() end. (node=661)
../src/etolisp fib.lisp  45.50s user 1.42s system 85% cpu 54.827 total

m9(^Д^)プギャー,とか言わないように。でも悲しいなぁ。明日はふて寝しよう。

追記:悔しいから fib は C で実装した。etolisp は標準で fib が使えます。大人げない大人の対応ですまんね。

% time ./etolisp ../test/fib.lisp
GC::collect() begin... (node=473)
473 nodes (3KB) are deleted.
GC::collect() end. (node=0)
./etolisp ../test/fib.lisp  0.02s user 0.01s system 43% cpu 0.066 total