これが古い投稿であることは知っていますが、理由もなく更新するつもりはありません。すべての点で受け入れられ、すべてのサブセットを分離可能に生成し、パワーセットを生成しない答え。
powerSet/2
数日前、組み込みの述語を使用せずに述語を実装しようとしていましたbagof/2
。しかしbagof/2
、setof/2
初心者にとってはそれほど簡単な問題ではありません(すべてのサブセットを個別に生成することは別の問題であり、はるかに簡単です)。そのため、ソリューションを実装した後、このトピックを検索している人々の間違いを防ぐために、ここに配置する方がよいと考えました。
私の解決策(なしbagof/2
)
generate(X, [Y], [[X| Y]])。
生成 (X、S、P) :-
S = [H | T]、
append([X], H, 温度),
generate(X, T, Rest),
append([Temp], Rest, P), !.
powerSet([], [[]])。
powerSet(セット、P) :-
セット = [H| T]、
powerSet(T, PsT),
生成(H、PsT、Ps)、
% write('プッシュしようとしています'), print(H), write(' to '),
% write('powerset のすべての要素'), print(T), write(' which is '),
% print(PsT), nl,
% write(' そして結果は '), print(Ps), nl, nl,
append(Ps, PsT, P), !.
コメント行を参照すると、コードが理解されます。
組み込みの predicate を使用する別のソリューションが利用可能ですbagof/3
。
おそらく今の方が役に立ちます。