Что делает вектор в операторе карты? - PullRequest
2 голосов
/ 12 октября 2011

В книге Clojure я нашел функцию карты с 3 аргументами:

(Map vector (iterate inc 0) coll)

Что делает вектор?Как получается, что эта функция принимает 3 аргумента вместо стандартных 2?

1 Ответ

8 голосов
/ 12 октября 2011

Функция map принимает переменное количество аргументов. Обязательным первым аргументом является функция, а затем вы можете передать любое количество коллекций. Когда передано более одной коллекции, соответствующий элемент из каждой коллекции будет передан в качестве аргумента функции (например, если вы передадите одну коллекцию, функция получит один аргумент, а если вы передадите три коллекции, она получит три аргумента ).

Что касается vector, она делает то же самое, что обычно делает функция vector - делает вектор из своих аргументов. Например, (vector 1 100 1000) дает [1 100 1000]. В этом случае его аргументами будут n-е элементы двух коллекций:

  1. Бесконечная последовательность целых чисел, начинающаяся с нуля

  2. Что бы ни было в coll

По сути, это превращает каждый элемент в coll в вектор, содержащий индекс элемента, за которым следует элемент. Например, если coll равно [a b c], это даст вам ([0 a] [1 b] [2 c]).

...