bowbow99 / xyzzy.ansify

Common Lisp の xyzzy にないもの詰め合わせ予定地
MIT License
6 stars 0 forks source link

typep などで structure も structure-object も使えない #43

Open bowbow99 opened 12 years ago

bowbow99 commented 12 years ago

問題

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 ではこのシンボルは使われてない。

user> (find-all-symbols "structure-object")
nil

結果的に xyzzy には「構造体のインスタンス」を表す型指定子が存在しない。

どうする

とりあえず ansify:structure-object は型指定子として使えるようにするなら。

(setf (get 'ansify::structure-object 'si::type-predicate) #'si:*structurep)

メモ