[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