Prolog,找到与列表中的参考值具有最小差异的值

时间:2015-03-05 16:29:52

标签: list prolog

我需要你对Prolog的帮助,我希望我的解释不会太难。

一般问题是:我有一个包含多个特征结构的列表(实际上是特征:Prolog中的值列表),其值为" time:xyz"其他价值观。我有一个带参考时间的参考特征结构。现在我需要具有与参考时间最接近的时间值的特征结构。

我的计划是浏览列表并将每个条目与当前最小差异与参考时间进行比较。 问题是当前最小值的变量MinFSR在第一次调用minimum(...)时没有值。所以我收到了一个错误。 如何检查MinFSR是否已有值?我想检查一下,如果它没有值,那么我想用list_min作为新H来呼叫MinFSR

list_min([], ReferenceFSR, MinFSR). %if list is empty stop
list_min([H|T], ReferenceFSR, MinFSR) :-
   minimum(H, MinFSR, ReferenceFSR, Min1),
   list_min(T, ReferenceFSR, Min1).


minimum(FSR1, FSR2, ReferenceFSR, MinFSR):-
   % reads out and compares the time of FSR1 and FSR2 to the referenceFSR 
   % and MinFSR is the FSR1 or FSR2 depending on which has the smaller
   % difference

我希望你能理解我的问题,虽然我写的很复杂。 提前谢谢!

1 个答案:

答案 0 :(得分:2)

我认为你很接近,但是你的谓词需要稍微重新修改。递归情况应该查看列表的两个head元素,因为你已经给出了一个谓词minimum/4,它通过比较一对值产生了所需的选择。

list_min([X], _, X).       % X is min for single list, [X]
list_min([X,Y|T], ReferenceFSR, MinFSR) :-
    minimum(X, Y, ReferenceFSR, Min),
    list_min([Min|T], ReferenceFSR, MinFSR).