問題のあるプログラムで作業しています。この短い例では、エラーは同じです。無限ループで失われました
EDITコードが間違っていた
does_something(A, [Num], Sol) :-
sort([Num|A], Sol).
correct(Solution) :-
Solution = [1,2,3,4,5].
pred1(_, Solution, Solution) :- correct(Solution), !.
pred1(A, B, Solution) :-
member(Num, A),
does_something(B, [Num], B_aux),
pred1(A, B_aux, Solution).
最終編集:私は何をしたいことは述語がdoes_somethingし、正しいとは何の関係もありません。これらは例のためのものですが、問題とは何の関係もありません。私が望むのは、述語numを使ってdoes_somethingを呼び出すのが正しい解を与えるかどうかを知ることです。それが解決しない場合、Aの別のメンバーを試すように訴えられます。それが決して失敗しなければ、問題はありません。私の問題は、私はA.
?- pred1([1,2,3], [], S).
Call: (9) [user] does_something([1], [1], _G6045) ? creep
Call: (10) [system] sort([1, 1], _G6047) ? creep
Exit: (10) [system] sort([1, 1], [1]) ? creep
Exit: (9) [user] does_something([1], [1], [1]) ? creep
Call: (9) [user] pred1([1, 2, 3], [1], _G5943) ? creep
Call: (10) [user] correct([1]) ? creep
Call: (11) [system] [1]=[1, 2, 3, 4, 5] ? creep
Fail: (11) [system] [1]=[1, 2, 3, 4, 5] ? creep
Fail: (10) [user] correct([1]) ? creep
Redo: (9) [user] pred1([1, 2, 3], [1], _G5943) ? creep
Call: (10) [lists] lists:member(_G6052, [1, 2, 3]) ? creep
Exit: (10) [lists] lists:member(1, [1, 2, 3]) ? creep
Call: (10) [user] does_something([1], [1], _G6057) ? creep
そのトレース部分の最初と最後の行が等しいに最初よりも別のテンキーと呼ばれるようにdoes_something作ることができないということです。
トレースを表示できますか?プログラムの完全なソースも役に立ちます。しかし、理想的には、エラーを再現する最小限の完全な例を見つけることを試みるべきです。 [MCVE](https://stackoverflow.com/help/mcve)を参照してください –
例を試してみましょう –
**プログラム全体を表示してください!そうでなければ、それはすべての2番目の推測です。 – false