在PROLOG中查找大于列表中数字的元素数

时间:2018-10-21 22:28:51

标签: prolog

您好,感谢您抽出宝贵时间阅读此问题。我有以下问题:

给出一个列表,该列表返回的数字大于X的示例:

更大(4,[1,2,3,4,5,6],N)结果。 N = 2 我的代码是:

y_1(0)

问题在于PROLOG仅返回 False ,而不返回 X 的值。

希望您能向我解释我做错了什么,在此先感谢您

1 个答案:

答案 0 :(得分:1)

由于如果谓词调用没有成功路径,那么Prolog中的谓词调用将失败,因此以下谓词子句毫无用处。您可以删除它。

greater(0,[],0):-!, fail.

您的下一个子句是您的递归基本情况,其格式不正确:

greater(N,[N],1).

即使它违反了您要计算列表中比N大的元素的条件,此操作仍然成功。 N不大于N。如果您希望greater(N, [X], 1).成功,那么此子句应该是什么样?

在您的递归子句中,您遇到了问题:

greater(N,[H|Q],X):-H>N,greater(Q,N,X),X is X+1.

X is X+1总是会失败,因为X的值不可能与值X+1相同。也就是说,没有等于自己的数字加一。您需要使用辅助变量:

greater(N,[H|Q],X):-H>N,greater(Q,N,X1),X is X1+1.

最后,您错过了H =< N时的情况:

greater(N,[H|Q],X):-H=<N, ....

此子句应是什么样?