我是Prolog的新手,我正在努力解决这个问题:
定义一个谓词
greater_than/2
,它以我们在本讲座中引入的符号(即0
,succ(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) ).
但当然不能正常工作,所以我要求任何人帮忙。 感谢。
答案 0 :(得分:4)
当您在寻找递归解决方案时,您必须提供基本案例和递归步骤。
你提供的基本案例几乎是正确的。但是它失败了,因为它会成功,例如当两个数字都为零时。只有当左侧的格式为succ(_)
且右侧为零时才会成功。
递归步骤应该从每一侧获取一个元素并应用递归。 因此,这应该有效:
greater_than(succ(_), 0).
greater_than(succ(X), succ(Y)):-
greater_than(X, Y).