在prolog中削减处理

时间:2011-01-22 17:58:37

标签: prolog

有人可以解释以下命令的处理:

max(X,Y,Max) :- X >= Y, !, Max = X ; Max = Y. 

我无法理解,中间究竟是什么意思!,提前谢谢

2 个答案:

答案 0 :(得分:3)

! (cut)意味着如果你到目前为止(成功地达到目前的目标),不要做任何回溯(考虑替代当前目标的替代方法),这可能是在裁员的位置之前打开的。

在你的例子中,剪切用于简洁地表达如何定义X和Y的最大值。也就是说,一旦你成功使用子目标X >= Y,正确的选择就不再有疑问了(所以统一Max with X)。

这里棘手的是,(表示逻辑AND)和;(表示逻辑OR)的优先级。后者比前者绑定更弱,因此只有X >= Y失败才能达到用Y统一Max的替代子目标(如果切换通过则不考虑当前目标的替代)。

答案 1 :(得分:2)

我认为答案非常明确。

好吧,我只是从你的样本中得出结论。在这里,我们可以“假设”那里有两个规则,即

max(X, Y, Max) :- X >= Y, !, Max = X.
max(X, Y, Max) :- Max = Y.

为什么有必要放!?这是因为没有它,您可以查询类似max(5,4,Max)的内容,结果将是

Max = 5;
Max = 4;

为什么会这样?因为Prolog系统找到了所有可能的答案。当!到来时,它将停止寻找其他人。