странность в функции карты замыкания - PullRequest
10 голосов
/ 20 марта 2011

первая странная вещь о карте в clojure в следующем фрагменте:

(apply map list '((1 a) (2 b) (3 c)))

Результат меня удивляет:

((1 2 3) (a b c))

Кто-нибудь может объяснить, как это работает?

1 Ответ

23 голосов
/ 20 марта 2011

(apply f x '(y z)) эквивалентно (f x y z), поэтому ваш код эквивалентен (map list '(1 a) '(2 b) '(3 c)).

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

Итак, (map list '(1 a) '(2 b) '(3 c)) сначала вызывает list с первыми элементами списков (т.е. числами) в качестве аргументов, а затем со вторыми элементами (буквами). Итак, вы получите ((list 1 2 3) (list 'a 'b 'c)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...