Prolog greater_than / 2 succ

时间:2012-07-14 15:31:51

标签: prolog successor-arithmetics

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

  

定义一个谓词greater_than/2,它以我们在本讲座中引入的符号(即0succ(0)succ(succ(0)) ...)中的两个数字作为参数和决定第一个是否大于第二个。 E.g:

?- 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) ).

但当然不能正常工作,所以我要求任何人帮忙。 感谢。

1 个答案:

答案 0 :(得分:4)

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

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

greater_than(succ(_), 0).
greater_than(succ(X), succ(Y)):-
  greater_than(X, Y).