我有一个带有两个参数的函数,如果它们是单位形式的自然数,并且第一个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()。
答案 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)起作用,而不是复合术语。运算符@>
将起作用(请参阅您正在使用的实现的文档),但我觉得您可能真的想要明确它。