clojure隐式映射解释
我理解map是如何工作的,但我被这个例子弄糊涂了:clojure隐式映射解释,clojure,Clojure,我理解map是如何工作的,但我被这个例子弄糊涂了: (def check-sum (fn [sequence] (apply + (map * (range 1 (inc (count sequence))) sequence)))) 当给定一个序列时,映射部分如下所示: (map * (range 1 (inc (count [5 1 1 4 7 7 1 3 1 0]))) [5 1
(def check-sum
(fn [sequence]
(apply + (map *
(range 1 (inc (count sequence)))
sequence))))
当给定一个序列时,映射部分如下所示:
(map * (range 1 (inc (count [5 1 1 4 7 7 1 3 1 0]))) [5 1 1 4 7 7 1 3 1 0])
其中返回以下内容:
(5 2 3 16 35 42 7 24 9 0)
我不明白地图中当前项目的倍增位置。如果它使用的是#(*%)等形式的匿名函数,我会理解
但是在这个例子中没有匿名函数。不需要匿名函数,因为命名函数*
是进行乘法的。两个集合被传递给map,因此它将每个集合中的相应元素传递给*
函数。map
的第一个参数应该是function,参数的数量应该与提供的集合数量相匹配。因此,如果要传递匿名函数,应编写如下代码:
(map #(* %1 %2) [1 3 5] [2 4 6])
;=> (2 12 30)
(map #(* %1 %2 %3) [1 3 5] [2 4 6] [3 5 7])
;=> (6 60 210)
但是*
本身是一个可以接受任意数量参数的函数(请检查REPL中的(doc*)
),您可以用更简单的形式编写代码:
(map * [1 3 5] [2 4 6])
;=> (2 12 30)
(map * [1 3 5] [2 4 6] [3 5 7])
;=> (6 60 210)
*
应用于每个集合的第一个元素集,第二个元素集
其他功能,如+
,-
,/
也可以以这种方式使用