【问题标题】:Prolog, find value with smallest difference to reference value in a listProlog,在列表中找到与参考值差异最小的值
【发布时间】:2015-03-06 04:43:23
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: list prolog


    【解决方案1】:

    我认为你已经接近了,但你的谓词需要重新修改一下。递归案例应该查看列表的两个头元素,因为您已经获得了一个谓词 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).
    

    【讨论】:

      猜你喜欢
      • 2011-04-27
      • 2017-09-19
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 2015-05-03
      相关资源
      最近更新 更多