Lisp:从任意多个列表生成元素的所有组合

问题描述 投票:0回答:0

我编写了一个函数,给出两个列表中元素的所有组合,

(defun comb (x y &optional (h y) (d nil)) 
  (if x
    (if y 
        (comb x (cdr y) h (cons (cons (car x) (car y)) d)) 
        (comb (cdr x) h h d))
    d)) 

例如

(comb '(1 2) '('a 'b))
->
( (2 . b) (2 . a) (1 . b) (1 . a) )

但是我很难将其概括为与任意多个列表兼容, 我知道你可以将此函数嵌套在 4 8 等不同列表的树状结构中,但这会搞砸输出格式,这不是我想要的解决方案。

lisp common-lisp
© www.soinside.com 2019 - 2024. All rights reserved.