2011-01-22 24 views
0

可以请人解释以下命令的处理:切削加工在序言

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

我不明白,究竟是什么意思,中间!,在此先感谢

回答

3

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

在你的例子中,cut被用来简单地表达如何定义X和Y的最大值。也就是说,一旦你成功地使用子目标X >= Y,正确的选择就不再存在疑问(所以将Max与X )。

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

2

我觉得答案已经很清楚了。

嗯,我只是从你的示例中总结一下。在这里,我们可以“假定”有两个规则存在,这是

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

为什么有必要把那个!?这是因为如果没有这一点,你可以查询像max(5,4,Max),其结果将是

Max = 5; 
Max = 4; 

它为什么会发生?因为Prolog系统找到了每个可能的答案。当!到来时,它将停止找到其他(s)。