为什么以下示例中的(range)
能够重现索引值?我想编写一个defn-defined函数,但是看不出这个例子如何工作来重现它的作用。我知道#正在创建一个匿名函数。
因此,假设(def d1 [:a :b :c])
如何在以下范围内生成索引?
(#(map list % (range)) d1)
((:a 0) (:b 1) (:c 2))
答案 0 :(得分:2)
range
返回一个无限的整数序列,从零开始。当map
传递两个集合参数时,它会使用两个参数调用f
,从集合中成对地获取它们。因此,对于f
中的每个元素x
,您的d1
将被调用一次,其中包含两个参数:x
及其d1
中的索引。
顺便说一句,请粘贴有效的代码,或者至少是有意义的。 #
处于无意义的地方,而且不平衡。
答案 1 :(得分:1)
如果我们应用匿名函数,我们得到(map list d1 (range))
。 range
不带参数,创建一个从2到无穷大的列表。所以我们用map
作为函数参数调用list
和d1
以及从0到无穷大的序列作为其他参数。 map
的作用是:它将给定的函数应用于给定序列中的元素,直到其中一个序列耗尽元素。所以我们获得的元素是(list first-element-of-d1 first-element-of-range)
,(list second-element-of-d1 second-element-of-range)
等等,直到我们已经遍历d1
中的每个元素。