Open bowbow99 opened 12 years ago
lisp:type-of は構造体のインスタンスに対して lisp:structure を返すが、これは lisp:typep でも ansify:typep でも型指定子として使えない。
lisp:type-of
lisp:structure
lisp:typep
ansify:typep
user> (defstruct foo) #<structure-definition: foo> user> (setf x (make-foo)) #S(foo) user> (lisp:type-of x) structure user> (symbol-package *) #<package: lisp> user> (lisp:typep x 'lisp:structure) nil user> (ansify:typep x 'lisp:structure) nil
ANSI 的には、structure などという型は無くて構造体のインスタンスは structure-object というクラスになるのだが、xyzzy ではこのシンボルは使われてない。
structure
structure-object
user> (find-all-symbols "structure-object") nil
結果的に xyzzy には「構造体のインスタンス」を表す型指定子が存在しない。
とりあえず ansify:structure-object は型指定子として使えるようにするなら。
ansify:structure-object
(setf (get 'ansify::structure-object 'si::type-predicate) #'si:*structurep)
subtypep
typep
問題
lisp:type-of
は構造体のインスタンスに対してlisp:structure
を返すが、これはlisp:typep
でもansify:typep
でも型指定子として使えない。ANSI 的には、
structure
などという型は無くて構造体のインスタンスはstructure-object
というクラスになるのだが、xyzzy ではこのシンボルは使われてない。結果的に xyzzy には「構造体のインスタンス」を表す型指定子が存在しない。
どうする
とりあえず
ansify:structure-object
は型指定子として使えるようにするなら。メモ
subtypep
は(他にもあちこち壊れてるままなので)直す時に一緒にstructure-object
はどうなるのか注意した方がよさげtypep
やsubtypep
の方でクラスの扱いをちゃんと実装すれば済む話になる