如何在CLOJURE中使用名称和值并行创建多个代理(for?或map?)?

时间:2015-10-09 05:49:48

标签: concurrency clojure functional-programming agent parallel-assignment

我试图制作一堆代理商。个人可以做:

(def myAgent (agent 3))

但是如果我想制作很多代理,我如何在匿名函数中为代理分配名称和值?我有这个:

(def agents (vec (map agent (range 0 50)) ))

这使得50个代理商,但没有一个具有价值。当我尝试匿名函数时:

(def agents (vec (map (fn [x] (def x (agent 3)) (range 0 50)) ))

它不起作用。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

创建一个包含3个代理的地图,其名称为地图键012,地图值为初始值为:initial-value

user=> (zipmap (range 3) (repeatedly  #(agent :initial-value)))
{0 #object[clojure.lang.Agent 0x31edaa7d {:status :ready, :val :initial-value}], 
 1 #object[clojure.lang.Agent 0x26adfd2d {:status :ready, :val :initial-value}], 
 2 #object[clojure.lang.Agent 0x3336e6b6 {:status :ready, :val :initial-value}]}