2

我是 Prolog 的新手,我正在尝试解决这个问题:

定义一个谓词,该谓词greater_than/2采用我们在本讲座中介绍的符号(即 , ...)中的两个数字0作为succ(0)参数succ(succ(0)),并确定第一个数字是否大于第二个数字。例如:

?- greater_than( succ(succ(succ(0))), succ(0) ).
yes.
?- greater_than( succ(succ(0)), succ(succ(succ(0))) ). 
no.

到目前为止,这是我的回答:

greater_than(X, 0).
greater_than( succ(succ(X)), succ(Y) ).

但当然不能正常工作,所以我正在向任何人寻求帮助。谢谢。

4

1 回答 1

6

当您正在寻找递归解决方案时,您必须提供基本案例和递归步骤。您提供的基本案例几乎是正确的。但是它失败了,因为它会成功,例如当两个数字都为零时。只有当左侧是表单succ(_)并且右侧为零时,它才应该成功。

递归步骤应该从每一侧获取一个元素并应用递归。因此这应该工作:

greater_than(succ(_), 0).
greater_than(succ(X), succ(Y)):-
  greater_than(X, Y).
于 2012-07-14T21:04:50.403 回答