想像してみてください:フラットワールドn*nセル。動く物体があります。それらは衝突する可能性があり、プロセスに従って、そのうちの1つを破壊する必要があります。
リッチヒッキーのアリの巣のアイデアを使って、オブジェクトをエージェントとして表現しています。したがって、衝突後、エージェントの1人は、他のエージェントからメッセージを受信した後、作業を停止する必要があります。
私の問題を説明するコードスニペットがあります。2番目のエージェントが予期せず停止します。
;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)
ありがとうございました!