1

P が X の累乗集合である場合に真となる述語 powerset(X, P) を定義したいと思います。P が地面であるかどうかに関係なく機能するはずです。

4

1 に答える 1

6

SICStus Prolog を使用しているため、library(lists) から subseq0(+Sequence, ?SubSequence) を使用できます。これは、「SubSequence が Sequence のサブシーケンスである場合に true ですが、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 の変更で説明されているように、subseteq0 を実装できます。これは、完全を期すためにここで引用します ( gusbroに感謝します) 。

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