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

时间:2014-09-14 20:07:58

标签: clojure

说我有这样的嵌套结构:

(def board [[:x :e :e]
[:o :x :e]
[:o :e :x]])

为什么此代码将其转换为90%

(apply map vector board)

2 个答案:

答案 0 :(得分:5)

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

按顺序收集它们以便返回。这样可以使原始序列中的“列”成为新行,将原始序列中的“行”作为新列。

答案 1 :(得分:0)

Apply(apply f x args)将fn f应用于通过在args中添加干预参数而形成的参数列表”

vector列表board(apply map (cons vector board))拼接到(cons vector board)时,map会被apply添加到{{1}}前面1}}它成为YosemiteMark答案中给出的表达。