是什么!序言中的符号意思是?

时间:2018-07-07 16:34:42

标签: prolog prolog-cut

我真的需要知道这个符号在后面出现时的含义和符号...例如看这段代码

glitter(yes) :-
   agent_location(X, Y),
   gold(X, Y),
   ! . 

2 个答案:

答案 0 :(得分:2)

要了解“ 削减”(!),您需要了解Prolog代码评估所涉及的回溯过程。如您所知,使用这段代码,Prolog仅知道如果X和Y也用{{1进行验证,则glitter()本身经过验证,则验证输入为yes的规则agent_location(X, Y) }}。换句话说,gold(X, Y)agent_location必须使用相同的参数进行验证。

这意味着Prolog将尝试查找X和Y的特定值,以便可以验证所有内容。它将沿着评估路径(评估树),为X尝试一个值,并查看是否有可能使用相同的X值继续评估。如果失败(例如,Prolog在{{中尝试了gold 1}},但X = 0不验证agent_location),它将返回并尝试使用另一条规则X = 0。那就是“ cut ”出现的时候。如果gold之后的操作失败,Prolog将永远不会检查是否可以使用另一条规则来解决之前的问题。

在此示例中,最终,如果对于该特定agent_location规则而言一切都失败了,Prolog将希望尝试另一条规则进行验证。我想您的原始代码为!指定了另一条规则,如果我没记错的话,您向我们显示的规则末尾的剪切表示如果遵循该规则的一条规则失败,则Prolog不会继续执行返回并检查是否可以尝试使用新值来解决glitter

通常用于提高评估效率并防止无限循环。

答案 1 :(得分:0)

!符号代表the cut。您可以阅读有关cut here的更多信息。 此外,可以在here中找到序言中的示例。

相关问题