clojure-为什么这段代码会转置嵌套结构

clojure-为什么这段代码会转置嵌套结构,clojure,Clojure,假设我有这样一个嵌套结构: (def board [[:x :e :e] [:o :x :e] [:o :e :x]]) 为什么这段代码将其转换为90% (apply map vector board) apply使代码等效于以下内容: (map vector [:x :e :e] [:o :x :e] [:o :e :x]) map随后将按顺序执行: (vector :x :o :o) ;; the first elements in the sequences (vector :e :

假设我有这样一个嵌套结构:

(def board [[:x :e :e]
[:o :x :e]
[:o :e :x]])
为什么这段代码将其转换为90%

(apply map vector board)

apply
使代码等效于以下内容:

(map vector [:x :e :e] [:o :x :e] [:o :e :x])
map
随后将按顺序执行:

(vector :x :o :o) ;; the first elements in the sequences
(vector :e :x :e) ;; the second elements in the sequences
(vector :e :e :x) ;; the third elements in the sequences
并按顺序收集它们以返回。这会使原始序列中的“列”变为新行,而原始序列中的“行”变为新列。

(应用f x args)
将fn f应用于参数列表,该参数列表是通过将插入的参数预加到args而形成的。”


所发生的事情是,
vector
被添加到
board
,当列表
(cons-vector board)
apply
拼接成
map
时,它就成为优胜美地马克答案中给出的表达式。

如果你想100%换位,使用
mapv
代替
map