Prolog大于/ 2次成功

use*_*468 1 prolog successor-arithmetics

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

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

?- greater_than( succ(succ(succ(0))), succ(0) ).
yes.
?- greater_than( succ(succ(0)), succ(succ(succ(0))) ). 
no.
Run Code Online (Sandbox Code Playgroud)

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

greater_than(X, 0).
greater_than( succ(succ(X)), succ(Y) ).
Run Code Online (Sandbox Code Playgroud)

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

gus*_*bro 5

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

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

greater_than(succ(_), 0).
greater_than(succ(X), succ(Y)):-
  greater_than(X, Y).
Run Code Online (Sandbox Code Playgroud)