Hi Konrad, I can answer 1 and 3:
(1) *agent* is set thread locally whenever a thread is an agent action. It's all in the Java code, grep for AGENT (3) send uses a thread pool that you should not assume you control, so blocking for e.g. I/O would be bad behavior and could hurt other agents' ability to progress. send-off gives you your own thread so you can't cause trouble by blocking Stuart > > I am trying to understand Rich's ant colony demo. It is pretty clear > overall, except for one aspect: the use of > > (when running > (send-off *agent* ...)) > > in all the functions executed by the agents, where ... stands for the > function itself. My guess is that this simply sends another request > for the same action, making for an infinite simulation. However, I > would like to understand how this works in detail. > > 1) What exactly is *agent*? It looks like a reference to the agent in > which the function is executing, but how does this work exactly? I > didn't find any explanation in the explanation of agents on the > Clojure Web site. > > 2) What is the point of (when running ...) considering that running is > set to true initially and then never changes? Is this just a way to > stop the simulation by running (def running false) from the command > prompt? > > 3) What is the exact difference between send and send-off? The manual > says the latter is for "potentially blocking functions", but what does > that mean and what is done differently in that case? > > (send-off Konrad understand-clojure) > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---