したがって、リストのすべての可能なサブセット + 順列を見つけるために、この述語を書きました。正しい出力が得られますが、何らかの理由で、すべての (正しい) 結果が得られた後もプログラムがループし続けます。
私は何を間違っていますか?
% Gets all subsets of a list
aSubset([], []).
aSubset([E|Tail], [E|NTail]):- aSubset(Tail, NTail).
aSubset([_|Tail], NTail):- aSubset(Tail, NTail).
% gets all subsets and permutates them
allSubsets([],[]).
allSubsets(X, Res) :- permutation(S, Res), aSubset(X, S).
allSubsets([1,2,3], X) に対して得られる結果は次のとおりです。
4 ?- allSubsets([1,2,3], X).
X = [] ;
X = [1] ;
X = [2] ;
X = [3] ;
X = [1,2] ;
X = [1,3] ;
X = [2,3] ;
X = [2,1] ;
X = [3,1] ;
X = [3,2] ;
X = [1,2,3] ;
X = [1,3,2] ;
X = [2,1,3] ;
X = [2,3,1] ;
X = [3,1,2] ;
X = [3,2,1] ;
Action (h for help) ? abort
% Execution Aborted
最後の 2 行でループを中止する必要があります。
前もって感謝します。