2009-08-28
#3 たらい回してみた
半端に compile するだけでもだいぶマシだけど、それでも200倍か・・・。
| -- | (tak 12 6 0) | (tak 12 6 1) | 遅さ |
|---|---|---|---|
| defun | 0.203 | 0.063 | --- |
| defmethod | 508.641 | 128.438 | 2505, 2038 |
| defmethod(compile 後) | 46.25 | 12.204 | 227, 193 |
;;; 生の xyzzy-lisp (defun tak (x y z) (if (<= x y) z (tak (tak (1- x) y z) (tak (1- y) z x) (tak (1- z) x y)))) => tak ;;; compile はしてない (time (tak 12 6 0)) => 0.203 (time (tak 12 6 1)) => 0.063
;;; closette で defmethod (defgeneric tak (x y z)) => #<Standard-Generic-Function tak > (defmethod tak ((x number) (y number) (z number)) (if (<= x y) z (tak (tak (1- x) y z) (tak (1- y) z x) (tak (1- z) x y)))) => #9=#<Standard-Method tak (number number number) > (time (tak 12 6 0)) => 508.641 (time (tak 12 6 1)) => 128.438
;;; 中途半端に compile してみる (do-symbols (sym #1=(find-package :closette)) (when (and (eq (symbol-package sym) #1#) (fboundp sym)) (format t "compiling ~S...~:[failed~:;done~]~%" sym (ignore-errors sym)))) compiling closette::canonicalize-direct-superclasses...done ;; 以下略 => nil (defgeneric tak (x y z)) => #12=#<Standard-Generic-Function tak > (defmethod tak ((x number) (y number) (z number)) (if (<= x y) z (tak (tak (1- x) y z) (tak (1- y) z x) (tak (1- z) x y)))) => #9=#<Standard-Method tak (number number number) > (time (tak 12 6 0)) => 46.25 (time (tak 12 6 1)) => 12.204
トラックバック - http://d.hatena.ne.jp/bowbow99/20090828/1251451015
リンク元
- 18 http://xyzzy.s53.xrea.com/wiki/index.php?Memo/ソースの変更・修正情報
- 17 http://d.hatena.ne.jp/
- 7 http://xyzzy.s53.xrea.com/wiki/index.php?cmd=read&page=Memo/ソースの変更・修正情報
- 4 http://practical-scheme.net/wiliki/rssmix.cgi
- 3 http://www.google.co.jp/reader/view/
- 2 http://mail.google.com/mail/?ui=2&view=bsp&ver=1qygpcgurkovy
- 2 http://search.minakoe.jp/rsss/rsss.asp?qry=C++&multi=1
- 2 http://www.google.co.jp/m/search?oe=UTF-8&client=safari&hl=ja&q=lisp+たらい回し
- 2 http://www.google.co.jp/search?hl=ja&safe=off&qscrl=1&q=xyzzy+defgeneric&aq=f&aqi=&aql=&oq=&gs_rfai=
- 2 http://www.google.co.jp/search?q=xyzzy+tak&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
