List Prolog应返回值时打印false

List Prolog应返回值时打印false,list,prolog,minimum,List,Prolog,Minimum,所以基本上,我试图在列表中找到第二个最小值,问题是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),

所以基本上,我试图在列表中找到第二个最小值,问题是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

你需要读一本教程或者买一本教科书。只有算术“函数”返回值,如果在该模式下调用,则所有其他谓词仅使用其中一个参数作为输出

大概是

minlist(List, Min)
而不是

Min is minlist(List)
这有点奇怪,因为您在谓词的开头正确地执行了几次,然后突然开始执行错误的操作

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

第二个最小的元素是列表,它是排序列表中的第二个元素


如果列表没有接地,则会发生故障,但您最初的尝试也是如此。

sec
是一个常量,而不是变量等。
second_smallest(List, SS) :-
    sort(List, [_,SS|_]).