【发布时间】:2016-10-27 01:47:15
【问题描述】:
首先,我想了解以下代码中的区别(如果有的话):
1 (setf list1 '(1 2 3))
2 (setf list2 '(10 100))
3
4 (defun som(x y )
5 (* x y))
6
7
8 (print(mapcar #'(lambda(x)x) list1))
9 (print (mapcar #'(lambda(x)x) list1))
返回以下内容:
(1 2 3)
(1 2 3)
然后我想了解如何执行以下操作:
(setf list1 '(1 2 3))
(setf list2 '(10 100))
(mapcar '#+ x y)
为了得到以下信息: ((11 101) (12 102) (13 103)),这是,添加第一个列表的第一项 到第二个列表的每个项目。 当然,我可以非常快速地定义一个函数,该函数将遍历列表并将地图车应用于列表。我想知道是否有任何原语可以做到这一点。
谢谢,晚安
【问题讨论】:
-
有一个名为 alexandria 的库,它定义了 map-product。见common-lisp.net/project/alexandria/draft/alexandria.html#Conses
-
请注意,map-product 结果是一个平面列表,而不是您想要的(列表列表)
标签: list lambda common-lisp