Prolog powerset谓词

时间:2012-04-26 17:46:41

标签: prolog sicstus-prolog powerset

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

1 个答案:

答案 0 :(得分:6)

由于您使用SICStus Prolog,您可以使用库(列表)中的subseq0(+ Sequence,?SubSequence),“当SubSequence是Sequence的子序列时,它是真的,但可能是序列本身”(引自手册{ {3}})。

      ?- setof(X, subseq0([a,b,c],X), Xs).
      Xs = [[],[a],[a,b],[a,b,c],[a,c],[b],[b,c],[c]]

如果您不允许使用库谓词,您可以按照http://www.sics.se/sicstus/docs/4.0.2/html/sicstus/lib_002dlists.html中的说明实现subseteq0,为了完整起见,我在这里引用(感谢 gusbro

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