【发布时间】:2017-08-24 11:28:27
【问题描述】:
我想组合两个列表的所有可能组合,为此我使用 mapcar
CL-USER> (mapcar #'(lambda (x) (mapcar #'(lambda (y) (list x y)) '(aa bb cc dd))) '(a b c))
(((A AA) (A BB) (A CC) (A DD)) ((B AA) (B BB) (B CC) (B DD))
((C AA) (C BB) (C CC) (C DD)))
答案是正确的,但我得到一个嵌套列表,我该如何解决这个问题。我不想将该列表展平一级,我对 mapcar 的使用不好,但我不知道如何解决这个问题
【问题讨论】:
-
MAPCAN(或ALEXANDRIA:MAPPEND)会将结果连接到一个列表中。 -
您要计算笛卡尔积:
(alexandria:map-product #'list '(a b c) '(aa bb cc dd)) -
是的,最后我想构造那个函数,谢谢
-
您也可以使用迭代来替代高级函数:
(loop for x in '(a b c) nconc (loop for y in '(aa bb cc) collect (list x y)))
标签: common-lisp