123
正如预期的那样,由于回溯,以下代码会输出:
between(1,3,X), write(X), false.
这个带有 cut outputs 的1
,也如预期的那样:
between(1,3,X), write(X), !, false.
但是这个输出123
令人惊讶:
between(1,3,X), write(X), not(!).
not(!)
评估为假,因此在一种方式上,它回溯是有道理的,但同时它应该已经切割,因此没有其他可能性可供探索。
相同的行为发生在\+
而不是not/1
。
为什么在否定时削减没有任何副作用?例如write/1
,在 anot
中与不在其中时具有相同的副作用。