!/0 是否应该穿过 (\+)/1 ?

rep*_*eat 4 prolog iso-prolog prolog-cut

一方面:

$ sicstus
SICStus 4.6.0 (x86_64-linux-glibc2.17): Mon Apr 6 09:23:37 PDT 2020
[...]

| ?- \+ (!,false) ; X = 1。
是的

... 另一方面 ...

$ gprolog
GNU Prolog 1.4.5(64 位)
[...]

| ?- \+ (!,false) ; X = 1。
真的 ?;
X = 1
是的

……另一方面:

$交换
欢迎使用 SWI-Prolog(线程,64 位,版本 8.2.2)
[...]

1 ?- \+ (!,false) ; X = 1。
真;
X = 1。

令人困惑,不是吗?请帮忙!

Pau*_*ura 6

只是 SICStus Prolog 顶层的一个工件。尝试例如

$ sicstus
SICStus 4.6.0 (x86_64-darwin-17.7.0): Mon Apr  6 18:23:42 CEST 2020
...
| ?- X = 0, \+ (!,false) ; X = 1.
X = 0 ? ;
X = 1 ? ;
no
Run Code Online (Sandbox Code Playgroud)

根据\+/1标准的要求,控制结构对于 SICStus Prolog 中的剪切是不透明的。