したがって、たとえば次のようなプロローグ述語があります。
getSomething([Head|Tail],List,MaxV,MaxK,BestThing) :-
%I call other functions that work just fine
makeaverage(List,Med),
compare(Med,MaxV,Comp),
(Comp < MaxK,
getSomething(Tail,List,MaxV,Comp,Head);
getSomething(Tail,List,MaxV,MaxS,BestThing)),
write(BestThing).
そして問題は、実際には _G267 であり、書き込みが返されることです。
モノ1 モノ2 モノ3 _G267
そして、私は本当にThing1が必要ですが、述語が再帰的に戻ると、すべてが台無しになります...だから...いくつかの助けが素晴らしいでしょう:)。
それを私が直した :
getSomething([Head],List,MaxV,MaxK,BestThing) :-
makeaverage(List,Med),
compare(Med,MaxV,Comp),
MaxK = Comp,
BestTHing = Head .
getSomething([Head|Tail],List,MaxV,MaxK,BestThing) :-
getSomething(Tail,List,MaxV,Comp1,Head1),
makeaverage(List,Med),
compare(Med,MaxV,Comp),
(Comp < MaxK
->
MaxK = Comp,
BestThing = Head;
MaxK = Comp,
BestThing = Head1).
または、そのようなアイデアは、初期化されていない変数を使用して再帰的に進み、1 つの要素リスト部分の最後の再帰呼び出しの最後にそれらを初期化することです...