日々ごちゃごちゃと考える

2009-08-28

#3 たらい回してみた

半端に compile するだけでもだいぶマシだけど、それでも200倍か・・・。


--(tak 12 6 0)(tak 12 6 1)遅さ
defun0.2030.063---
defmethod508.641128.4382505, 2038
defmethod(compile 後)46.2512.204227, 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