【发布时间】:2018-10-21 22:28:50
【问题描述】:
您好,感谢您抽出宝贵时间阅读此问题。我有以下问题:
给定一个返回大于 X 的数字个数的列表示例:
大于 (4, [1,2,3,4,5,6], N) 结果。 N = 2 我的代码是:
greater(0,[],0):-!, fail.
greater(N,[N],1).
greater(N,[H|Q],X):-H>N,greater(Q,N,X),X is X+1.
问题是 PROLOG 只返回 False 而不是 X 的值。
我希望你能向我解释我做错了什么,我提前感谢你的
【问题讨论】:
-
X is X+1毫无意义。一个变量只能统一一个值,因此一个变量不能同时是1和2。 -
为什么在第一个子句中写
fail?此外,如果H <= N在这里会发生什么? -
如果列表为空,我会写失败。
-
那么我不使用同一个变量我可以使用辅助变量。
-
由于在 Prolog 中没有成功的查询是失败的,你不需要
greater(0,[],0):-!, fail.。greater(0, [], 0)如果没有通过您的其他谓词从句成功,它将失败。您的基本情况greater(N,[N],1).不正确。这表示N大于N,这当然不是真的。基本情况应该是什么?您有一个元素列表和一个数字的情况是什么?什么时候应该用 1 成功?
标签: prolog