符号在序言中是什么意思?



我真的需要知道这个符号在后面和符号之后是什么意思......例如,查看此代码

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

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

要理解"切割">(!(,您需要了解Prolog对其代码进行评估所涉及的回溯过程。您可能知道,使用这段代码,Prolog 只知道与输入yesglitter()的规则被验证,如果 X 和 Y 也使用gold(X, Y)验证agent_location(X, Y)本身。换句话说,agent_locationgold必须使用相同的参数进行验证。

这意味着Prolog将尝试为X和Y找到特定值,以便可以验证所有内容。它将沿着评估路径(评估树(并尝试 X 的值,看看是否可以继续使用 X 的相同值进行评估。如果失败(假设Prolog在agent_location中尝试X = 0,但X = 0没有验证gold(,它将返回并尝试使用另一个规则进行agent_location。这就是">削减"的时候。如果!后的某些东西失败了,Prolog永远不会去检查它是否可以用另一个规则解决切割之前的所有问题。

在这个例子中,最终,如果该特定glitter规则的所有内容都失败,Prolog将希望尝试另一个规则进行验证。我想您的原始代码为glitter指定了另一个规则,如果我没记错的话,您向我们展示的规则末尾的切口意味着,如果遵循此规则的规则失败,Prolog 将不会返回并检查它是否可以尝试新值来解决glitter(yes)

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

最新更新