您好,感谢您抽出宝贵时间阅读此问题。我有以下问题:
给出一个列表,该列表返回的数字大于X的示例:
更大(4,[1,2,3,4,5,6],N)结果。 N = 2 我的代码是:
y_1(0)
问题在于PROLOG仅返回 False ,而不返回 X 的值。
希望您能向我解释我做错了什么,在此先感谢您
答案 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, ....
此子句应是什么样?