[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Defstruct doldrums
From: eliot@winnie.Princeton.EDU (eliot handelman)
I need to know how to map over the slots of random structures. Supposing
this were called MAPSTRUCT, taking a function and a structure, it would
feed the contents of each slot (and perhaps also the slot-name) to the
function.
This is how it has to behave:
> (mapstruct #'(lambda (slot slotname) (list slot slotname))
(make-flibber :a 1 :b 2))
((A 1) (B 2))
I need this because I'm trying to port something originally written in
KCl to Allegro. In KCl structures are vectors, and you can figure out
everything you need from the structure plist, but in Allegro the plist
is, I see, also a structure whose print form doesn't tell me anything.
I'm using Allegro on the Next.
On present versions of Allegro you can treat "untyped" (that is,
default typed) defstructs as vectors. LENGTH will return the number
of slots. SVREF (and SETF thereof) will operate correctly. The
zeroth slot is the symbol naming the structure, and the remaining
vector slots are the defstruct slots.
Of course, this functionality of LENGTH and SVREF aren't provided by
any CL spec and therefore might disappear or change in a future
version.
--Eliot Handelman
Music Dept,
Princeton U.
Say hello to Paul Lansky for me.