list - gnu Prolog powerset 修改

标签 list prolog set substring dcg

所以我得到了这个用于 powerset:

powerset([], []).
powerset([H|T], P) :- powerset(T,P).
powerset([H|T], [H|P]) :- powerset(T,P).

这将生成列表的所有集合。是否可以按列表顺序生成所有集合。

例子:
List = [a,b,c]

我想得到
[a],[a,b],[a,b,c],[b],[b,c],[c]

注意没有 [a,c]在这个子集列表中,因为这些是从左边开始到右边的子集。

我试过使用附加和递归的组合,但这并没有达到我想要的效果。在这一点上有点难倒。

谢谢。

最佳答案

怎么样

powerset(L, [H|T]):-
  append([H|T], _, L).
powerset([_|L], P):-
  powerset(L, P).

关于list - gnu Prolog powerset 修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4146117/

相关文章:

java - 缓存 Set 时最好的标识符是什么? Set的hashCode计算什么时候发生?

java - 难以跟踪 NullPointerException

c++ - find() 函数对于集合有效吗?

python - del运算符如何在python中的列表中工作?

prolog - 如何返回 alpha-beta 算法中的下一步?

python - 如何删除列表中的数字并保持元素的重置? Python

序言。如何检查两个数学表达式是否相同

list - Prolog - 如何计算列表中满足特定条件的元素数量?

python - 使用两个列表创建不同的句子

string - 如何比较 Haskell 中同一列表中的多个字符串