1

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

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

2 回答 2

2

要了解“剪辑”(!),您需要了解 Prolog 评估其代码所涉及的回溯过程。正如您可能知道的那样,使用这段代码,Prolog 只知道当 X 和 Y 也验证时,如果本身验证glitter()了输入规则,则验证输入规则。换句话说,并且必须使用相同的参数进行验证。yesagent_location(X, Y)gold(X, Y)agent_locationgold

这意味着 Prolog 将尝试找到 X 和 Y 的特定值,以便可以验证所有内容。它将沿着评估路径(评估树)尝试 X 的值,看看是否可以使用 X 的相同值继续评估。如果失败(假设 Prolog 尝试X = 0但未agent_location验证X = 0gold它将返回并尝试使用另一个规则agent_location。这就是“”来的时候。如果!失败后的某些事情,Prolog 将永远不会检查它是否可以用另一个规则解决切割前的所有事情。

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

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

于 2018-07-10T02:29:23.680 回答
1

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

于 2018-07-07T16:47:49.963 回答