On Jun 14, 2011, at 19:48 , Zach Beane wrote: > Raymond Wiker <rwi...@gmail.com> writes: > >> On Jun 14, 2011, at 19:30 , Martin Simmons wrote: >> >>>>>>>> On Tue, 14 Jun 2011 09:32:50 -0400, Daniel Weinreb said: >>>> >>>> But Fare pointed out to me that being able to add generic functions >>>> specialized on these would be a good thing. This would mean making them >>>> use >>>> CLOS not for encapsulation but for genericty. >>> >>> Use can specialize methods on defstruct classes too, so they don't have to >>> be >>> CLOS instances defined with defclass. >> >> Built-in classes too[1], which means that you can have methods >> specialized on (e.g.) single-float and double-float, fixnum and >> bignum, list and vector, etc. > > Well, only if those types also happen to have a corresponding > implementation-specific class. SINGLE-FLOAT, DOUBLE-FLOAT, FIXNUM, and > BIGNUM are specified as types. LIST and VECTOR are system classes. FLOAT > is also a system class. > > I recently ran into some accidentally unportable code that specialized a > method argument on DOUBLE-FLOAT. It worked in SBCL but failed in CLISP > because CLISP provides no DOUBLE-FLOAT class.
You're right - looks like I should have spent a little time on looking things up (again) :-) CLTL2 lists (table 28-1, page 846) a number of predefined types with their class precedence lists. This table includes things like float, rational, integer and complex, but not things like single-float, double-float. Sooo, it *is* possible to specialize on built-in types, but not necessarily on *all* of them. _______________________________________________ pro mailing list pro@common-lisp.net http://lists.common-lisp.net/cgi-bin/mailman/listinfo/pro