【发布时间】:2011-08-23 22:06:54
【问题描述】:
想象一下:平面世界 n*n 个单元格。有移动的物体。它们可能会发生碰撞,根据流程,它们中的一个应该被销毁。
我使用来自 Rich Hickey 蚁群的想法将对象表示为代理。因此,在碰撞后,其中一个代理必须在收到其他代理的消息后停止工作。
有一个代码 sn-p 来说明我的问题:第二个代理意外停止。
;agents
(def f_guy (agent nil))
(def s_guy (agent nil))
;functions for agents
(defn f_do [x]
(do
(Thread/sleep 20)
(println "f")
(send-off *agent* f_do)))
(defn s_do [x]
(do
(Thread/sleep 40)
(println "s")
(send-off f_guy nil)
(send-off *agent* s_do)))
;the process
(defn start []
(do
(send-off f_guy f_do)
(send-off s_guy s_do)))
;go
(start)
谢谢!
【问题讨论】: