[cells-devel] kickstart (fixed)
momerath
michael at guildsoftware.com
Wed Mar 15 23:49:19 UTC 2006
Wow that was weird:) I used the google toolbar spellchecker right
before sending, and it acted a bit odd, so I checked the sent copy and
saw that it had left all the spellchecker formatting in the message!
Here it is as plain text. There are still some extraneous spaces, but
I don't think they'll make it hard to read, so...
Thanks for getting back to me. I was beginning to wonder which of the
5 ways to interpret the silence :) I think it must be in the genes: (
http://en.wikipedia.org/wiki/Warnock's_Dilemma)
Anyway, here is what I've got:
( defmodel cargo-hold ()
(ship-owner capacity
;; a set of cargo-types
(types :cell t : initarg :types
: initform nil)
;; cargo-type -> quantity
(quantities :cell t : initarg :quantities
: initform (make-hash-table))))
( defmodel cargo ()
;; a type-id, name and the number of
;; cargo-hold units it takes up (1-3)
(type name volume
;; the character-id of the owner of
;; the cargo-hold unless cargo is spaced
(holder :cell t : initarg :holder
: initform (c-in nil) : accessor holder)
( auth-list :cell t : initarg : auth-list
: initform nil : accessor auth-list)
(recipient :cell t : initarg :recipient
: initform nil : accessor recipient)
(stolen :cell t : initarg :stolen
: initform (c? (when (member (^holder)
(^ auth-list))
t))
: accessor stolen)
(spaced :cell t : initarg :spaced
: initform (c? (when holder t))
: accessor spaced)
(delivered :cell t : initarg :delivered
: initform (c? (when ( eql (^holder)
(^recipient))
t))
: accessor delivered)))
The first thing you'll probably notice is that there is no mechanism
for the cargo-holds to actually "contain" cargo objects. I know I
could do as the "summer" example of the cell-basics doc does, and push
them onto a list, and recalculate based on the whole list every time
it changes, but I was hoping for something more elegant and
efficient. Only one entry in the quantities hash needs to change when
an item is added for instance. I thought of having in and out slots
(set the slot to a cargo object to add or remove; the other slots do
their thing and then clear the in/out slot), but that seems ugly and I
wasn't even sure how to pull it off.
And then there is the whole thing with cargo-sets which is closer to
what I'd like to do with Cells on the larger scale. Basically what I
want is to have a large number of sets and their unions/intersections
efficiently accessible anywhere in my code- stuff like "all characters
of faction X in sector Y carrying at least one Z in their cargo hold.
I hope this makes my level of understanding more clear. I think I'm
probably more prepared for the paradigm shift than most, owing, no
doubt, to my long infatuation with Ted Nelson's ZigZag.
~Michael Warnock
Guild Software Inc.
More information about the cells-devel
mailing list