我真的需要知道这个符号在后面出现时的含义和符号...例如看这段代码
glitter(yes) :-
agent_location(X, Y),
gold(X, Y),
! .
答案 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)