Prolog powerset谓词

use*_*759 2 prolog powerset sicstus-prolog

我希望定义一个谓词powerset(X,P),当P是X的powerset时,它是真的.无论P是否为地,都应该工作.

Ale*_*nik 6

由于您使用SICStus Prolog,您可以使用库(列表)中的subseq0(+ Sequence,?SubSequence),"当SubSequence是Sequence的子序列时,它是真的,但可能是序列本身"(从手册http://引用)www.sics.se/sicstus/docs/4.0.2/html/sicstus/lib_002dlists.html).

      ?- setof(X, subseq0([a,b,c],X), Xs).
      Xs = [[],[a],[a,b],[a,b,c],[a,c],[b],[b,c],[c]]
Run Code Online (Sandbox Code Playgroud)

如果你不允许使用库谓词,你可以按照gnu Prolog powerset修改中的解释实现subseteq0,为了完整起见,我在这里引用(感谢gusbro)

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