我想了解这个功能:
(defn mat-eq
"Checks if two matrices are equal"
[A B]
(and (= (count A) (count B))
(reduce #(and %1 %2) (map = A B))))
“我们首先使用count和=函数比较两个矩阵的行长度,然后使用reduce函数来比较内部向量元素。”我不明白这一部分:“本质上,reduce函数重复应用一个函数,该函数接受序列中连续元素的两个参数,并在应用函数减少序列中的所有元素时返回最终结果。” 有人可以解释这一部分: (减少#(和%1%2)(map = A B))
答案 0 :(得分:2)
map
能够获取多个集合而不是一个集合。
您可以通过运行类似
的内容来查看此工作(map (fn [i x]
(println i x))
(range) ; The first collection
["A" "B" "C"]) ; The second collection
0 A
1 B
2 C
=> (nil nil nil)
上面的例子也可以简单地写成
(map println (range) ["A" "B" "C"])
给map
的集合数决定了需要给映射函数多少个参数。由于我在这里给了map
两个集合,映射函数需要带两个参数;
x
。
在您的示例中,map
还会收集两个集合,A
和B
。由于=
接受任意数量的参数,因此可以在此处使用它来检查一个集合中的每个元素是否与另一个集合中相同索引处的元素相同。
或者,换句话说
(mapv = [1 2 3] [1 2 4])
与
基本相同[(= 1 1)
(= 2 2)
(= 3 4)] ; Note that they differ here
返回[true true false]
。最后一个是假的,因为每个集合的最后一个元素不匹配。
这是两个集合的成对等式检查。