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中与不在其中时具有相同的副作用。