Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
clojure隐式映射解释_Clojure - Fatal编程技术网

clojure隐式映射解释

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

我理解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 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)
*
应用于每个集合的第一个元素集,第二个元素集

其他功能,如
+
-
/
也可以以这种方式使用