*turtles*
(list
(make-turtle
- :who *current-id*
+ :who (coerce *current-id* 'double-float)
:color (coerce (+ 5 (* 10 (clnl-random:next-int 14))) 'double-float)
:heading (coerce (clnl-random:next-int 360) 'double-float)
:xcor 0d0
:while agent
:do (let ((*myself* *self*) (*self* agent)) (funcall fn)))))
+(defun of (fn agent-set)
+ "OF FN AGENT-SET => RESULT
+
+ARGUMENTS AND VALUES:
+
+ FN: a function, run on each agent
+ AGENT-SET: a NetLogo agentset
+ RESULT: a list
+
+DESCRIPTION:
+
+ OF is equivalent to of in NetLogo.
+
+ The specified AGENT-SET runs the given FN. The order in which the agents
+ are run is random each time, and only agents that are in the set at the
+ beginning of the call. A list is returned of the returned valuse of
+ FN.
+
+ See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#of"
+ (let
+ ((iter (shufflerator agent-set)))
+ (loop
+ :for agent := (funcall iter)
+ :while agent
+ :collect (let ((*myself* *self*) (*self* agent)) (funcall fn)))))
+
(defun shufflerator (agent-set)
(let
((copy (copy-list agent-set))
See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#create-turtles"
(loop :for i :from 1 :to n :do (create-turtle)))
+(defun reset-ticks ()
+ "RESET-TICKS => RESULT
+
+ARGUMENTS AND VALUES:
+
+ RESULT: undefined
+
+DESCRIPTION:
+
+ Resets the tick counter to zero, sets up all plots, then updates all plots.
+
+ See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#reset-ticks"
+ (setf *ticks* 0d0))
+
+(defun tick ()
+ "RESET-TICKS => RESULT
+
+ARGUMENTS AND VALUES:
+
+ RESULT: undefined
+
+DESCRIPTION:
+
+ Advances the tick counter by one and updates all plots.
+
+ If the tick counter has not been started yet with reset-ticks, an error results.
+
+ See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#tick"
+
+ (when (not *ticks*) (error "reset-ticks must be called"))
+ (incf *ticks*))
+
+(defun ticks ()
+ "TICKS => CURRENT-TICKS
+
+ARGUMENTS AND VALUES:
+
+ CURRENT-TICKS: A positiv double, representing the current number of ticks
+
+DESCRIPTION:
+
+ Reports the current value of the tick counter. The result is always a number and never negative.
+
+ If the tick counter has not been started yet with reset-ticks, an error results.
+
+ See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#ticks"
+ (when (not *ticks*) (error "reset-ticks must be called"))
+ *ticks*)
+
(defun create-world (&key dims)
"CREATE-WORLD &key DIMS => RESULT
(defmethod dump-object ((o (eql t))) "true")
(defmethod dump-object ((o (eql nil))) "false")
+(defmethod dump-object ((o list)) (format nil "[~{~A~^ ~}]" (mapcar #'dump-object o)))
+
(defun current-state ()
"CURRENT-STATE => WORLD-STATE
(lambda (turtle)
(format nil
"\"~A\",\"~A\",\"~A\",\"~A\",\"~A\",~A"
- (turtle-who turtle)
+ (dump-object (turtle-who turtle))
(dump-object (turtle-color turtle))
(dump-object (turtle-heading turtle))
(dump-object (turtle-xcor turtle))