我怎么能在序言中比较自然数呢



我有一个函数,它接受两个参数,并比较它们是否是单位形式的自然数,以及第一个参数是否大于第二个!

这是我写的代码,但每次它都会让我"不"。

nat(0).
nat(s(X)) :- nat(X).
sum(X,0,X) :- nat(X).
sum(X,s(Y),s(Z)) :- sum(X,Y,Z).
gr(X,Y) :- nat(s(X)), nat(s(Y)), X>Y.

出了什么问题?一切都在Prolog中。函数是gr()。

首先,您可能想要sum,而不是这个:

sum(0, Y, Y) :-
    nat(Y).
sum(s(X), Y, s(Z)) :-
    sum(X, Y, Z).

这样Prolog就可以通过只看第一个参数来识别这两个子句是互斥的。

现在到您的大于

% gr(X, Y) is true if X is greater than Y
gr(X, Y) :- sm(Y, X).
% sm(X, Y) is true if X is smaller than Y
sm(0, s(Y)) :-
    nat(Y).
sm(s(X), s(Y)) :-
    sm(X, Y).

为了回答您的实际问题:问题是运算符>处理整数(如1、0或-19),而不是复合项。运算符@>会起作用(请参阅您正在使用的实现文档),但我觉得您实际上可能希望对此进行明确说明。

相关内容

  • 没有找到相关文章

最新更新