Common lisp 公共lisp中的嵌套mapcars
我想结合两个列表的所有可能组合,为此我使用mapcarCommon lisp 公共lisp中的嵌套mapcars,common-lisp,Common Lisp,我想结合两个列表的所有可能组合,为此我使用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))) 答案是正确的,但我得到一个嵌套列表,我如何解决这个问题。我不想将
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 (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))
MAPCAN
(或ALEXANDRIA:MAPPEND
)将结果连接到一个列表中。您要计算笛卡尔积:(ALEXANDRIA:map product#'list'(ab c)'(aa bb cc dd))
是的,最后我想构造该函数,谢谢您也可以进行迭代,作为高级函数的替代:(循环用于x in'(a b c)ncoc(循环用于y in'(aa bb cc)collect(列表x y))