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).

或者类似的想法是你递归地使用未初始化的变量,并在一个元素列表部分中的最后一次递归调用结束时初始化它们......

4

1 回答 1

0

只需复制我之前的评论作为答案:

BestTHing应该BestThing在第一个子句中getSomething

getSomething这会将 的第四个参数与其第一个参数的单个元素统一起来。

于 2012-06-12T21:03:32.673 回答