【问题标题】:Prolog printing false when it should be returning a value当它应该返回一个值时,Prolog 打印 false
【发布时间】:2017-03-28 21:00:27
【问题描述】:

所以基本上我试图在列表中找到第二个最小值,问题是 mino 和 secondMin 返回 false,而不是数字。当我手动执行 minlist(List, Min) 时,它返回 Min = number,但我无法让 sec 获取该值。相反,它仍然是错误的。有人可以帮忙吗?

第二个最小值

secondMin(L, Min2):-
    minlist(L,Min),
    delete(L,Min,Li),                   %no prob ver
    mino(L, k),                 %return k as the 2nd minimum of L
    Min2 is k.                  %Min2 is k.
//////////some code here////////////

mino(List, sec):-

    sec is minlist(List, Min).              %min 2 is the minimum of Li

【问题讨论】:

  • sec 是常量,不是变量等。

标签: list prolog minimum


【解决方案1】:

您需要阅读教程或获取教科书。只有算术“函数”返回值,如果在该模式下调用,所有其他谓词只需使用其中一个参数进行输出。

类似

minlist(List, Min)

而不是

Min is minlist(List)

这有点奇怪,因为你在谓词开始时正确地做了几次,然后突然你开始做错了。

至于“列表中第二小的数字”,这可能更容易:

第二小的元素是列表中的第二个元素。

second_smallest(List, SS) :-
    sort(List, [_,SS|_]).

如果列表不成立,这将失败,但您最初的尝试也是如此。

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    相关资源
    最近更新 更多