문제가있는 프로그램을 만들고 있습니다. 이 짧은 예에서 오류가 동일합니다무한 루프에서 길을 잃었습니다
편집코드가 잘못
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)를 참조하십시오. –
예제를 작성해 보겠습니다. –
** 전체 프로그램을 보여주세요! 그렇지 않으면 모두 추측입니다. – false