Lisp的新手。我知道
(mapcar #'list '(1 2) '(3 4))
将给出
'((1 3) (2 4))
根据我对申请如何运作的理解,我希望
(apply #'(lambda (&rest x) (mapcar #'list x)) '((1 2) (3 4)))
返回相同的结果。相反,我正在
'(((1 2)) ((3 4)))
我很困惑,因为
(apply #'append '((1 2) (3 4)))
给了我
'(1 2 3 4)
正如所料。发生了什么事?
答案 0 :(得分:3)
简化它。假设您使用A
代替(1 2)
,而B
代替(3 4)
:
(apply #'(lambda (&rest x) (mapcar #'list x)) '(A B))
因为&rest x
接受所有参数并将它们打包为列表,所以x
具有值
(A B)
。
然后mapcar
迭代两次,将A
传递给list
,生成(A)
,然后对B
执行相同操作。然后mapcar
列出了这些内容,生成( (A) (B) )
将print语句放在那里以查看正在发生的事情是很有用的。