否定削减的行为
Behavior of cuts in negation
由于回溯,以下代码如预期的那样输出 123
:
between(1,3,X), write(X), false.
这个带有剪切输出 1
,也符合预期:
between(1,3,X), write(X), !, false.
但是这个输出 123
令人惊讶:
between(1,3,X), write(X), not(!).
not(!)
的计算结果为 false,因此从某种意义上说,它回溯是有道理的,但同时它应该被切断,因此没有其他可能性可供探索。
相同的行为发生在 \+
而不是 not/1
。
为什么在取消时切割没有任何副作用?例如 write/1
在 not
中与不在
中时具有相同的副作用。
由于回溯,以下代码如预期的那样输出 123
:
between(1,3,X), write(X), false.
这个带有剪切输出 1
,也符合预期:
between(1,3,X), write(X), !, false.
但是这个输出 123
令人惊讶:
between(1,3,X), write(X), not(!).
not(!)
的计算结果为 false,因此从某种意义上说,它回溯是有道理的,但同时它应该被切断,因此没有其他可能性可供探索。
相同的行为发生在 \+
而不是 not/1
。
为什么在取消时切割没有任何副作用?例如 write/1
在 not
中与不在