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
, функция отображения должна принимать два параметра;i
и 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]
.Последнее является ложным, потому что последние элементы каждой коллекции не совпадают.
Это попарная проверка равенства двух коллекций.