See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#show"
(format t "Showing: ~A~%" (dump-object value)))
+(defun lookup-color (color)
+ "LOOKUP-COLOR COLOR => COLOR-NUMBER
+
+ARGUMENTS AND VALUES:
+
+ COLOR: a symbol representing a color
+ COLOR-NUMBER: the NetLogo color integer
+
+DESCRIPTION:
+
+ Returns the number used to represent colors in NetLogo.
+
+ See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#Constants"
+ (case color
+ (:black 0d0)
+ (:gray 5d0)
+ (:white 9.9d0)
+ (:red 15d0)
+ (:orange 25d0)
+ (:brown 35d0)
+ (:yellow 45d0)
+ (:green 55d0)
+ (:lime 65d0)
+ (:turquoise 75d0)
+ (:cyan 85d0)
+ (:sky 95d0)
+ (:blue 105d0)
+ (:violet 115d0)
+ (:magenta 125d0)
+ (:pink 135d0)))
+
(defun create-turtle ()
(setf
*turtles*
:ycor 0d0))))
(incf *current-id*))
+(defun die ()
+ "DIE => RESULT
+
+ARGUMENTS AND VALUES:
+
+ RESULT: undefined, commands don't return
+
+DESCRIPTION:
+
+ The turtle or link dies
+
+ A dead agent ceases to exist. The effects of this include:
+ - The agent will not execute any further code.
+ - The agent will disappear from any agentsets it was in, reducing the size of those agentsets by one.
+ - Any variable that was storing the agent will now instead have nobody in it.
+ - If the dead agent was a turtle, every link connected to it also dies.
+ - If the observer was watching or following the agent, the observer's perspective resets.
+
+ See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#die"
+ (when (not (turtle-p *self*)) (error "Gotta call die in turtle scope, dude (~A)" *self*))
+ (setf (turtle-who *self*) -1)
+ (setf *turtles* (remove *self* *turtles*)))
+
(defun turtles ()
"TURTLES => ALL-TURTLES
(setf
(turtle-xcor *self*)
(wrap-x *topology*
- (+ (turtle-xcor *self*) (* n (strictmath:sin (strictmath:to-radians (turtle-heading *self*)))))))
+ (+ (turtle-xcor *self*) (* n (using-cached-sin (turtle-heading *self*))))))
(setf
(turtle-ycor *self*)
(wrap-y *topology*
- (+ (turtle-ycor *self*) (* n (strictmath:cos (strictmath:to-radians (turtle-heading *self*))))))))
+ (+ (turtle-ycor *self*) (* n (using-cached-cos (turtle-heading *self*)))))))
(defun forward (n)
"FORWARD N => RESULT
(t (jump (if (> i 0d0) 1d0 -1d0)) (internal (- i (if (> i 0d0) 1d0 -1d0)))))))
(internal n)))
+(defun turn-right (n)
+ "TURN-RIGHT N => RESULT
+
+ARGUMENTS AND VALUES:
+
+ N: a double, the amount the turtle turns
+ RESULT: undefined
+
+DESCRIPTION:
+
+ The turtle turns right by number degrees. (If number is negative, it turns left.)
+
+ See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#right"
+ (when (not (turtle-p *self*)) (error "Gotta call fd in turtle scope, dude (~A)" *self*))
+ (let
+ ((new-heading (+ (turtle-heading *self*) n)))
+ (setf (turtle-heading *self*)
+ (cond
+ ((< new-heading 0) (+ (mod new-heading -360) 360))
+ ((>= new-heading 360) (mod new-heading 360))
+ (t new-heading)))))
+
+(defun turn-left (n)
+ "TURN-LEFT N => RESULT
+
+ARGUMENTS AND VALUES:
+
+ N: a double, the amount the turtle turns
+ RESULT: undefined
+
+DESCRIPTION:
+
+ The turtle turns left by number degrees. (If number is negative, it turns right.)
+
+ See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#right"
+ (turn-right (- n)))
+
(defun create-turtles (n)
"CREATE-TURTLES N => RESULT
See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#create-turtles"
(loop :for i :from 1 :to n :do (create-turtle)))
-(defun create-world (model)
- "CREATE-WORLD MODEL => RESULT
+(defun create-world (&key dims)
+ "CREATE-WORLD &key DIMS => RESULT
+
+ DIMS: (:xmin XMIN :xmax XMAX :ymin YMIN :ymax YMAX)
ARGUMENTS AND VALUES:
- MODEL: A clnl-model:model to use to initialize the vm
RESULT: undefined
+ XMIN: An integer representing the minimum patch coord in X
+ XMAX: An integer representing the maximum patch coord in X
+ YMIN: An integer representing the minimum patch coord in Y
+ YMAX: An integer representing the maximum patch coord in Y
DESCRIPTION:
This should be called before using the engine in any real capacity. If
called when an engine is already running, it may do somethign weird."
- (setf *model* model)
+ (setf *dimensions* dims)
(setf *turtles* nil)
(setf *current-id* 0))
(defmethod dump-object ((o string)) o)
+(defmethod dump-object ((o (eql t))) "true")
+(defmethod dump-object ((o (eql nil))) "false")
+
(defun current-state ()
"CURRENT-STATE => WORLD-STATE