范围如何在这个例子中起作用?

时间:2013-06-11 18:29:50

标签: clojure anonymous-function seq

为什么以下示例中的(range)能够重现索引值?我想编写一个defn-defined函数,但是看不出这个例子如何工作来重现它的作用。我知道#正在创建一个匿名函数。

因此,假设(def d1 [:a :b :c])如何在以下范围内生成索引?

(#(map list % (range)) d1)
((:a 0) (:b 1) (:c 2))

2 个答案:

答案 0 :(得分:2)

range返回一个无限的整数序列,从零开始。当map传递两个集合参数时,它会使用两个参数调用f,从集合中成对地获取它们。因此,对于f中的每个元素x,您的d1将被调用一次,其中包含两个参数:x及其d1中的索引。

顺便说一句,请粘贴有效的代码,或者至少是有意义的。 #处于无意义的地方,而且不平衡。

答案 1 :(得分:1)

如果我们应用匿名函数,我们得到(map list d1 (range))range不带参数,创建一个从2到无穷大的列表。所以我们用map作为函数参数调用listd1以及从0到无穷大的序列作为其他参数。 map的作用是:它将给定的函数应用于给定序列中的元素,直到其中一个序列耗尽元素。所以我们获得的元素是(list first-element-of-d1 first-element-of-range)(list second-element-of-d1 second-element-of-range)等等,直到我们已经遍历d1中的每个元素。