想象一下:平坦的世界 n*n 个细胞。有移动的物体。它们可以碰撞,根据过程,其中一个应该被销毁。
我正在使用来自 Rich Hickey 蚁群的想法将对象表示为代理。因此,在碰撞后,代理之一必须在收到其他代理的消息后停止工作。
有一个代码片段可以说明我的问题:第二个代理意外停止。
;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)
谢谢!