+++ /dev/null
-(in-package #:clnl-nvm)
-
-(defcommand ask (agent-or-agentset fn)
- "ASK AGENT-OR-AGENTSET FN => RESULT
-
- AGENT-OR-AGENTSET: AGENT | AGENTSET
- RESULT: :undefined
-
-ARGUMENTS AND VALUES:
-
- FN: a function, run on each agent
- AGENT: a NetLogo agent
- AGENTSET: a NetLogo agentset
-
-DESCRIPTION:
-
- ASK is equivalent to ask in NetLogo.
-
- The specified AGENTSET or AGENT runs the given FN. In the case of an
- AGENTSET, 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.
-
- See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#ask"
- (cond
- ((agentset-p agent-or-agentset)
- (let
- ((iter (shufflerator (agentset-list agent-or-agentset))))
- (loop
- :for agent := (funcall iter)
- :while agent
- :do (when (not (and (turtle-p agent) (= -1 (turtle-who agent))))
- (let ((*myself* *self*) (*self* agent)) (with-stop-and-death-handler (funcall fn)))))))
- ((agent-p agent-or-agentset)
- (let ((*myself* *self*) (*self* agent-or-agentset)) (with-stop-and-death-handler (funcall fn))))
- (t
- (error "Ask requires an agentset or agent but got: ~A" agent-or-agentset))))
-
-(defcommand stop ()
- "STOP => RESULT
-
- RESULT: :undefined
-
-DESCRIPTION:
-
- Returns from the current stop block, which will halt the currently running
- thing, be that the program, current ask block, or procedure. Stop has odd
- semantics that are best gleaned from the actual NetLogo manual.
-
- See http://ccl.northwestern.edu/netlogo/docs/dictionary.html#stop"
- (error (make-condition 'stop)))