lisp - 我如何获得满足 Common Lisp 条件的列表的集合和子集的所有可能组合

标签 lisp common-lisp clisp

对于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/

相关文章:

package - LISP cond 应答无包

common-lisp - 迭代 plist 并设置每个键的值

使用 +、-、* 和/对表达式执行符号和数字运算的 LISP 函数

macros - 使用宏时每次迭代后参数递增

string - 编写比较字符串函数

Lisp IO 问题

lisp - 在 lisp 中从双 float 创建一个单 float 数组?

c - 我如何在 CFFI 中包装包含结构指针的结构?

common-lisp - sbcl 上的 undefined variable ,而不是 clisp 上的 undefined variable

macros - 试图重写一个丑陋的宏