[Openmcl-devel] Applying sequence functions to a new type

rm at fabula.de rm at fabula.de
Tue Mar 1 04:19:34 PST 2005


On Tue, Mar 01, 2005 at 07:06:11AM -0500, Denis Bueno wrote:
> 
> Define it like so, as a struct:
> 
> (defstruct (vec2 (:type vector))
>  a
>  b)

Yes, but that'll only work iff you need nothing more than 
struct features. Is there a way to get the same for "real"
objects (in case multiple inheritance et al. is important)?

 Thanks RalfD

> Then you can do:
> 
> > (make-vec2 :a 'a-val :b 'b-val)
> #(A-VAL B-VAL)
> > (vec2-a *)
> A-VAL
> > (vec2-b **)
> B-VAL
> 
> On 01 Mar 2005, at 02.14, Andrew P. Lentvorski, Jr. wrote:
> 
> >This is probably a really stupid question, but how do I define the 
> >sequence functions so that they apply to a new class?
> >
> >For example, let's say I want a stupid class that always has two 
> >elements a and b.  I would like to be able to access a and b as 
> >thought they were elements 0 and 1 of a sequence.
> >
> >Welcome to OpenMCL Version (Beta: Darwin) 0.14.2-040925!
> >? (defclass Vec2 ()
> >           ((a :accessor a
> >               :initarg :a)
> >            (b :accessor b
> >               :initarg :b)))
> >#<STANDARD-CLASS VEC2>
> >? (setq v2 (make-instance 'Vec2 :a 7 :b 11))
> >#<VEC2 #x644EAB6>
> >? (elt v2 0)
> >> Error in process listener(1): value #<VEC2 #x644EAB6> is not of the 
> >expected type SEQUENCE.
> >> While executing: CCL::SEQUENCE-TYPE
> >> Type :POP to abort.
> >Type :? for other options.
> >1 > ^D
> >? ;; Okay, let's try a different tack
> >(defclass Vec2 (sequence)
> >           ((a :accessor a
> >               :initarg :a)
> >            (b :accessor b
> >               :initarg :b)))
> >> Error in process listener(1): The class #<BUILT-IN-CLASS SEQUENCE> 
> >was specified as a
> >>                               super-class of the class 
> >#<STANDARD-CLASS VEC2>;
> >>                               but the meta-classes #<STANDARD-CLASS 
> >BUILT-IN-CLASS> and
> >>                               #<STANDARD-CLASS STANDARD-CLASS> are 
> >incompatible.
> >> While executing: #<CCL::STANDARD-KERNEL-METHOD SHARED-INITIALIZE 
> >:AFTER (CCL::SLOTS-CLASS T)>
> >> Type :POP to abort.
> >Type :? for other options.
> >1 >
> >? ;; Okay, that sure didn't work
> >
> >So how do I define a function elt or redefine Vec2 such that elt can 
> >be written to work with it?
> >
> >Thanks,
> >-a
> >
> >_______________________________________________
> >Openmcl-devel mailing list
> >Openmcl-devel at clozure.com
> >http://clozure.com/mailman/listinfo/openmcl-devel
> >
> >
> --
> Denis Bueno
> PGP: http://pgp.mit.edu:11371/pks/lookup?search=0xA1B51B4B&op=index
> "To be positive: To be mistaken at the top of one's voice." - Ambrose 
> Bierce
> 
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> http://clozure.com/mailman/listinfo/openmcl-devel



More information about the Openmcl-devel mailing list