前提・実現したいこと
Prologの練習課題に取り組んでいます。
与えられた集合(集合はリストで表わされるとする)のすべての部分集合の集合を
計算するために,関係powerset(Set,Subsets)をbagofを用いて定義せよ
という問題について
ソースコード
%subs : 部分集合をすべて表示する述語
subs([],[]).
subs([X|L],Subset):- ,! %リスト先頭の文字が違う場合
subs(L,Subset).
subs([X|List],[X|Subset]):- %リスト先頭が同じ場合
subs(List,Subset).
powerset(Set,Subsets) :-
bagof(Subs,subs(Set,Subs),Subsets).
と書きました
実行結果
?- powerset([a,b,c],L).
L = [[], [c], [b], [b, c], [a], [a, c], [a, b], [a|...]].
となり、どんな入力でも7つめ以降の解は[...]となります、原因はなんでしょうか?
traceしてみると、7つめ以降の解を探すときに
^ Call: (16) call('$bags':'$destroy_findall_bag') ? creep
というものが呼び出されています、これで検索をかけてみても全く結果がでてきません。
引数を2つにして解が7つ以内であれば正常に動作するのですが、理由がわかる方教えていただきたいです。
補足情報(FW/ツールのバージョンなど)
Windows10
SWI-Prolog
です
あなたの回答
tips
プレビュー