gnu Prolog powerset修改

Mat*_*att 5 substring list set prolog dcg

所以我为powerset得到了这个:

powerset([], []).
powerset([H|T], P) :- powerset(T,P).
powerset([H|T], [H|P]) :- powerset(T,P).
Run Code Online (Sandbox Code Playgroud)

这会生成所有列表集.是否可以按列表顺序生成所有集合.

例:

List = [a,b,c]
Run Code Online (Sandbox Code Playgroud)

我想得到

[a],[a,b],[a,b,c],[b],[b,c],[c]
Run Code Online (Sandbox Code Playgroud)

请注意[a,c],此子集列表中没有,因为这些是从左侧开始向右侧的子集.

我尝试过使用append和recursion的组合,但这并不是我想要的.在这一点上有点难过.

谢谢.

gus*_*bro 6

怎么样

powerset(L, [H|T]):-
  append([H|T], _, L).
powerset([_|L], P):-
  powerset(L, P).
Run Code Online (Sandbox Code Playgroud)