我编写了以下递归函数来为两个数字中较大的一个赋值:
max(A,B,X) :-
A >= B,
X is A.
max(A,B,X) :-
max(B,A,X).
这可以按预期工作,但作为Prolog的新手,我犹豫是否相信这是最有效的解决方案。有没有更好的方法呢?
此外,按';'调用函数后再次重复它。这是正确的行为吗?
提前谢谢。
答案 0 :(得分:4)
这对我来说似乎很复杂。尝试像
这样的东西max(A,B,A) :- A > B .
max(A,B,B) :- A =< B .
虽然你可能想要进行一些类型检查。
[编辑以消除切割的需要,并为预先实例化的第3个参数提供更好的支持。]
当然,另一种选择可能是这样的:
max(A,B,M) :- A > B -> M=A ; M=B .
这将抛出一个错误,即A或B未绑定,而第一个示例无论如何被调用都会起作用(只要实例化2个参数)。例如,将其作为
调用max(A,3,5).
收益X=5
。
答案 1 :(得分:4)
为什么不使用内置算术“max”功能? Z是max(X,Y)。如果你想在其他方向上使用谓词,也可以使用约束。