对于L =(ABCD)的元素列表,要生成满足元素的词典顺序(A< B< C< D< Z)的元素的所有可能组合,将生成所有组合。 例如L =(ABCD)井输出(A),(B),(C),(D),(AB),(BC),(CD),(ABC),(BCD),(ABCD)。 / p>
答案 0 :(得分:0)
看起来你只是编写简单的函数来获取列表的幂集,然后只需删除一个空集,然后以任何你想要的方式对它进行排序。
var template = '<button id="myButton_#" class="myButtonsClass" type="button">testButton</button>';
for (var i=0; i<10, i++) {
console.log(template.replace('#',i));
}
要准确获取您的编辑输出,您可以删除NIL并将其反转:
(defun powerset (lst)
(if lst (mapcan (lambda (el) (list (cons (car lst) el) el))
(powerset (cdr lst)))
'(())))
CL-USER> (powerset '(A B C D))
((A B C D) (B C D) (A C D) (C D) (A B D) (B D) (A D) (D) (A B C) (B C) (A C)
(C) (A B) (B) (A) NIL)
这是你想要的吗?
更新。对不起,没有提到你想让它以另一种方式解决。你应该求助它:
CL-USER> (reverse (remove nil (powerset '(A B C D))))
((A) (B) (A B) (C) (A C) (B C) (A B C) (D) (A D) (B D) (A B D) (C D) (A C D)
(B C D) (A B C D))
这是另一种更具比较性的解决方案,使用CL-USER> (sort
(reverse
(remove nil
(powerset '(A B C D))))
#'< :key #'length)
((A) (B) (C) (D) (A B) (A C) (B C) (A D) (B D) (C D) (A B C) (A B D) (A C D)
(B C D) (A B C D))
宏,执行您所描述的内容:
loop
答案 1 :(得分:0)
可以通过以下函数获取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<=)
对它们进行排序。