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