我真的需要知道这个符号在符号之后是什么意思......例如看看这个代码
glitter(yes) :-
agent_location(X, Y),
gold(X, Y),
! .
我真的需要知道这个符号在符号之后是什么意思......例如看看这个代码
glitter(yes) :-
agent_location(X, Y),
gold(X, Y),
! .
要了解“剪辑”(!
),您需要了解 Prolog 评估其代码所涉及的回溯过程。正如您可能知道的那样,使用这段代码,Prolog 只知道当 X 和 Y 也验证时,如果本身验证glitter()
了输入规则,则验证输入规则。换句话说,并且必须使用相同的参数进行验证。yes
agent_location(X, Y)
gold(X, Y)
agent_location
gold
这意味着 Prolog 将尝试找到 X 和 Y 的特定值,以便可以验证所有内容。它将沿着评估路径(评估树)尝试 X 的值,看看是否可以使用 X 的相同值继续评估。如果失败(假设 Prolog 尝试X = 0
但未agent_location
验证X = 0
)gold
它将返回并尝试使用另一个规则agent_location
。这就是“切”来的时候。如果!
失败后的某些事情,Prolog 将永远不会检查它是否可以用另一个规则解决切割前的所有事情。
在这个例子中,最终,如果该特定规则的一切都失败了glitter
,Prolog 将想要尝试另一个规则进行验证。我想您的原始代码指定了另一个规则glitter
,如果我没记错的话,您向我们展示的规则末尾的删减意味着如果遵循该规则的规则失败,Prolog 将不会返回并检查它是否可以尝试新的值来解决glitter(yes)
。
它通常用于提高评估效率并防止死循环。