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

Concurrency 如何使用CLOJURE中的名称和值并行创建多个代理(for?或map?)?,concurrency,clojure,functional-programming,agent,parallel-assignment,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)) )) 它不起作用。任何帮助都将不胜感激。创建一个包

我想做一帮探员。就个人而言,我们可以做到:

(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)) ))

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

创建一个包含3个代理的映射,它们的名称是映射键
0
1
2
,映射值是具有初始值的代理
:初始值

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}]}

“有50个代理,但没有一个有价值”-clojure中的每件事都有价值好吧,我对clojure非常业余,但我绞尽脑汁想弄清楚这一点,而这不是网上的任何地方,至少我能找到。这不是这个地方的用途吗?为什么否决投票而不提供帮助?@ProgrammingEqualsSuperpower创建代理时必须提供初始值。你不能仅仅通过做(代理)来创建代理。我不明白被接受的答案是什么,而这里假定不起作用的代码是不起作用的(除了作为散列映射和向量之外,两者都由数字键索引,都包含代理,这两种情况下的代理都初始化为某个起始值)。我不知道你问题中的代码有什么不能满足你的需要。所以,我写错了。当我执行上述操作时,更正了,(def agents(vec(map(fn[x](def x(agent 3))(范围0 50)))它给了我一个包含值3的50个agents的向量,但它们都被分配给了x,而不是我想让x代表的唯一数字。