我如何比较prolog中的自然数?

时间:2013-12-05 17:43:39

标签: numbers prolog compare

我有一个带有两个参数的函数,如果它们是单位形式的自然数,并且第一个arg大于第二个参数,则进行比较!

所以这是我写的代码,但每次它都让我“不”。

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()。

1 个答案:

答案 0 :(得分:2)

首先,你可能想要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)起作用,而不是复合术语。运算符@>将起作用(请参阅您正在使用的实现的文档),但我觉得您可能真的想要明确它。