Clojure 更改向量列表中的值

Clojure 更改向量列表中的值,clojure,Clojure,我知道如果我将团队定义为: (def team ["A" "B" "C" "D"]) 我可以通过以下方式将值B更改为E (assoc team 1 "E") > ["A" "E" "C" "D"] 如果我现在有: (def teams '(["A" "B" "C"] ["D" "E" "F"] ["G" "H" "I"])) 例如,如何将B更改为1 我想你可能需要在中使用assoc,但这似乎不起作用,或者我犯了一个错误。我试过了 (assoc-in teams [0 1] "1")

我知道如果我将团队定义为:

(def team ["A" "B" "C" "D"])
我可以通过以下方式将值B更改为E

(assoc team 1 "E") > ["A" "E" "C" "D"]
如果我现在有:

(def teams '(["A" "B" "C"] ["D" "E" "F"] ["G" "H" "I"]))
例如,如何将B更改为1

我想你可能需要在中使用assoc,但这似乎不起作用,或者我犯了一个错误。我试过了

(assoc-in teams [0 1] "1")

你差点就成功了。当您应该使用向量时,您正在使用列表来执行您想要执行的操作:

(def teams [["A" "B" "C"] ["D" "E" "F"] ["G" "H" "I"]])
这是因为向量是一种关联结构,即它是一种具有键/值对的结构。它就像一张地图,它是关联的,除了向量,键是向量中的索引。与此相对应的是一个列表,该列表不能编入索引,必须迭代才能获得元素。因此,要在中使用assoc,需要使用关联结构,而列表则不行

您得到的错误是:clojure.lang.PersistentList无法强制转换为clojure.lang.Associative,查看源代码可以看出:

给出:

与关联规则相比:


你差点就成功了。当您应该使用向量时,您正在使用列表来执行您想要执行的操作:

(def teams [["A" "B" "C"] ["D" "E" "F"] ["G" "H" "I"]])
这是因为向量是一种关联结构,即它是一种具有键/值对的结构。它就像一张地图,它是关联的,除了向量,键是向量中的索引。与此相对应的是一个列表,该列表不能编入索引,必须迭代才能获得元素。因此,要在中使用assoc,需要使用关联结构,而列表则不行

您得到的错误是:clojure.lang.PersistentList无法强制转换为clojure.lang.Associative,查看源代码可以看出:

给出:

与关联规则相比:

public interface IPersistentVector extends Associative, Sequential, ...