[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: type-of

Two comments on your comments.

First of all, neither TYPE-OF or SUBTYPEP is necessary for implementing
TYPEP.  In fact, doing it that way is probably the most inefficient 
implementation possible.  In PCLS, for example, all of the built-in types
like INTEGER or SIMPLE-STRING have predicates associated with them that
can be found by a quick lookup procedure, and there is special logic for 
handling the more complicated type specifiers like (ARRAY ...).

I agree that TYPE-OF should not be thrown out just because nobody uses
it much, *provided* that the function is there because it implements some
functionality users could not easily implement themselves.  For the uses
of TYPE-OF that people have mentioned so far, this is not the case.  Here
is a portable, 3-line function that will check an object against whatever
set of type specifiers I think are appropriate in this situation:

(defun my-type-of (object possible-type-spec-list)
    (dolist (type possible-type-spec-list t)
        (if (typep object type) (return type))))

The only case where this would fail would be if I do not know in advance
what type specifiers I want to see returned.  Gee whiz!  Isn't that what
TYPE-OF is supposed to do now?  :-)