关于clojure中地图的第一个奇怪的事情是在以下片段中:
(apply map list '((1 a) (2 b) (3 c)))
结果让我感到惊讶:
((1 2 3) (a b c))
任何人都可以解释它是如何运作的?
答案 0 :(得分:23)
(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))
。所以你得到{{1}}。