1

我希望定义一个谓词 powerset(X, P),当 P 是 X 的幂集时它为真。无论 P 是否接地,都应该有效。

4

1 回答 1

6

由于您使用 SICStus Prolog,您可以使用 library(lists) 中的 subseq0(+Sequence, ?SubSequence),“当 SubSequence 是 Sequence 的子序列时为真,但可能是 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]]

如果您不允许使用库谓词,则可以按照gnu Prolog powerset modify中的说明实现 subseteq0 ,为了完整起见,我在此引用(感谢gusbro

powerset([], []).
powerset([H|T], P) :- powerset(T,P).
powerset([H|T], [H|P]) :- powerset(T,P).
于 2012-04-26T20:59:52.760 回答