我真的需要知道这个符号在后面和符号之后是什么意思......例如,查看此代码
glitter(yes) :-
agent_location(X, Y),
gold(X, Y),
! .
!
符号表示the cut
。您可以在此处阅读有关cut
的更多信息。 此外,可以在此处找到prolog中的示例。
要理解"切割">(!
(,您需要了解Prolog对其代码进行评估所涉及的回溯过程。您可能知道,使用这段代码,Prolog 只知道与输入yes
glitter()
的规则被验证,如果 X 和 Y 也使用gold(X, Y)
验证agent_location(X, Y)
本身。换句话说,agent_location
和gold
必须使用相同的参数进行验证。
这意味着Prolog将尝试为X和Y找到特定值,以便可以验证所有内容。它将沿着评估路径(评估树(并尝试 X 的值,看看是否可以继续使用 X 的相同值进行评估。如果失败(假设Prolog在agent_location
中尝试X = 0
,但X = 0
没有验证gold
(,它将返回并尝试使用另一个规则进行agent_location
。这就是">削减"的时候。如果!
后的某些东西失败了,Prolog永远不会去检查它是否可以用另一个规则解决切割之前的所有问题。
在这个例子中,最终,如果该特定glitter
规则的所有内容都失败,Prolog将希望尝试另一个规则进行验证。我想您的原始代码为glitter
指定了另一个规则,如果我没记错的话,您向我们展示的规则末尾的切口意味着,如果遵循此规则的规则失败,Prolog 将不会返回并检查它是否可以尝试新值来解决glitter(yes)
。
它通常用于提高评估效率并防止无限循环。