对于L = (A B C D)的元素列表,要生成满足元素字典顺序(A < B < C < D ...< Z)的元素的所有可能组合,将生成所有组合. 例如 L = (A B C D) 井输出 (A), (B), (C), (D), (A B), (B C), (C D), (A B C), (B C D), (A B C D).
最佳答案
lexicographical (非词典)顺序可以通过以下函数获得,该函数检查列表是否为 a
在列表之前 b
按字典顺序:
(defun lex<= (a b)
(or (null a)
(and b
(string<= (car a) (car b))
(lex<= (cdr a) (cdr b)))))
所以,你可以产生所有的组合,就像在 coredump 的答案中一样,然后用 (sort result #'lex<=)
对它们进行排序.
关于lisp - 我如何获得满足 Common Lisp 条件的列表的集合和子集的所有可能组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33698443/