有人可以解释以下命令的处理:
max(X,Y,Max) :- X >= Y, !, Max = X ; Max = Y.
我无法理解,中间究竟是什么意思!
,提前谢谢
答案 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系统找到了所有可能的答案。当!
到来时,它将停止寻找其他人。