
Update of /project/cells/cvsroot/kennysarc In directory clnet:/tmp/cvs-serv12716 Added Files: struct.arc Log Message: defstruct lite in Arc --- /project/cells/cvsroot/kennysarc/struct.arc 2008/02/02 22:19:28 NONE +++ /project/cells/cvsroot/kennysarc/struct.arc 2008/02/02 22:19:28 1.1 ;; Same license as Arc (mac struct ((name (o pfx (string name "-"))) . slot-defs) (with (maker (coerce (+ "mk-" (string name)) 'sym) defmaker (coerce (+ "mk-def-" (string name)) 'sym) fsd (map [if (acons _) _ (list _ nil)] slot-defs)) `(do (def ,defmaker () (listtab ',fsd)) (def ,maker initargs (aif (keep [~find _ ',(map carif slot-defs)] (map car (pair initargs))) (do (ero "Invalid initargs to " ',maker " supplied: " it ". Allowed are " ',slot-defs) nil) (let self (,defmaker) (map [= (self (car _)) (cadr _)] (pair initargs)) self))) ,@(map (fn (sd) `(def ,(coerce (+ (string pfx) (string sd)) 'sym) (self) (self ',sd))) (map carif slot-defs))))) (prn (macex '(struct (cell c-) awake rule (pulse 0)))) (struct (cell c-) awake rule (pulse 0)) (prn (map [_ (mk-cell 'awake 1 'rule 2 'pulse 3)] (list c-awake c-rule c-pulse)))
participants (1)
-
ktilton