X-Git-Url: https://code.consxy.com/gitweb/gitweb.cgi?p=clnl;a=blobdiff_plain;f=src%2Fmain%2Fnvm%2Fagent.lisp;h=c52ca3a3dcb38f95d4ed56e14a27c309d9627781;hp=93da162c7c312a00346be2ae2c28d49947dc6b62;hb=f00d5c7c0e0b18f334da14c2e4107a7f1f68b45f;hpb=82888b4c12ff462e539e9e7746d5268f9c46f330 diff --git a/src/main/nvm/agent.lisp b/src/main/nvm/agent.lisp index 93da162..c52ca3a 100644 --- a/src/main/nvm/agent.lisp +++ b/src/main/nvm/agent.lisp @@ -19,6 +19,22 @@ DESCRIPTION: See http://ccl.northwestern.edu/netlogo/docs/dictionary.html for builtins" (agent-value-inner agent (intern (string-upcase var) :keyword))) +(defsetf agent-value (var &optional (agent '*self*)) (new-value) + `(set-agent-value-inner ,agent ,var ,new-value)) + +(defgeneric set-agent-value-inner (agent var new-value)) (defgeneric agent-value-inner (agent var)) -(defmethod agent-value-inner ((agent turtle) (var (eql :who))) (turtle-who agent)) +(defmacro defagent-value (type symb &optional accessor) + (let + ((accessor (or accessor (intern (format nil "~A-~A" type symb)))) + (agent (gensym)) + (var (gensym)) + (new-val (gensym))) + `(progn + (defmethod agent-value-inner ((,agent ,type) (,var (eql ,symb))) (,accessor ,agent)) + (defmethod set-agent-value-inner ((,agent ,type) (,var (eql ,symb)) ,new-val) (setf (,accessor ,agent) ,new-val))))) + +(defagent-value turtle :who) + +(defagent-value patch :pcolor patch-color)