0

したがって、たとえば次のようなプロローグ述語があります。

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 つの要素リスト部分の最後の再帰呼び出しの最後にそれらを初期化することです...

4

1 に答える 1

0

以前のコメントを回答としてコピーするだけです:

BestTHingBestThingの最初の節にある必要がありますgetSomething

これにより、 の 4 番目の引数が最初の引数の 1 つの要素と統合されgetSomethingます。

于 2012-06-12T21:03:32.673 に答える