Common lisp 公共lisp中的嵌套mapcars

Common 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))) 答案是正确的,但我得到一个嵌套列表,我如何解决这个问题。我不想将

我想结合两个列表的所有可能组合,为此我使用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 (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))