!/0 是否应该切断 (\+)/1 ?
Is !/0 supposed to cut through (\+)/1 or not?
一方面:
$ sicstus
SICStus 4.6.0 (x86_64-linux-glibc2.17): Mon Apr 6 09:23:37 PDT 2020
[...]
| ?- \+ (!,false) ; X = 1.
yes
...另一方面...
$ gprolog
GNU Prolog 1.4.5 (64 bits)
[...]
| ?- \+ (!,false) ; X = 1.
true ? ;
X = 1
yes
...另一方面:
$ swipl
Welcome to SWI-Prolog (threaded, 64 bits, version 8.2.2)
[...]
1 ?- \+ (!,false) ; X = 1.
true ;
X = 1.
令人困惑,不是吗?请帮忙!
只是 SICStus Prolog 的神器 top-level。尝试例如
$ 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
根据标准的要求,\+/1
控制结构对于 SICStus Prolog 中的削减是不透明的。
一方面:
$ sicstus SICStus 4.6.0 (x86_64-linux-glibc2.17): Mon Apr 6 09:23:37 PDT 2020 [...] | ?- \+ (!,false) ; X = 1. yes
...另一方面...
$ gprolog GNU Prolog 1.4.5 (64 bits) [...] | ?- \+ (!,false) ; X = 1. true ? ; X = 1 yes
...另一方面:
$ swipl Welcome to SWI-Prolog (threaded, 64 bits, version 8.2.2) [...] 1 ?- \+ (!,false) ; X = 1. true ; X = 1.
令人困惑,不是吗?请帮忙!
只是 SICStus Prolog 的神器 top-level。尝试例如
$ 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
根据标准的要求,\+/1
控制结构对于 SICStus Prolog 中的削减是不透明的。