将参数分配给两个数字中的较大者

时间:2012-01-05 18:49:09

标签: recursion prolog

我编写了以下递归函数来为两个数字中较大的一个赋值:

max(A,B,X) :-   
    A >= B,
    X is A.

max(A,B,X) :-
    max(B,A,X).

这可以按预期工作,但作为Prolog的新手,我犹豫是否相信这是最有效的解决方案。有没有更好的方法呢?

此外,按';'调用函数后再次重复它。这是正确的行为吗?

提前谢谢。

2 个答案:

答案 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)。如果你想在其他方向上使用谓词,也可以使用约束。