我对在 SWI Prolog 中使用否定有一个奇怪的问题。当我在否定“\+”后使用以下不带空格的代码时,会出现错误:
2 ?- assert((only_child(X) :- mother(M,X),\+(mother(M,_),\+ X==_))).
true.
3 ?- only_child(cathy).
ERROR: only_child/1: Undefined procedure: (\+)/2
ERROR: However, there are definitions for:
ERROR: (\+)/1
Exception: (7) \+(mother(melody, _G2102), \+cathy==_G2107) ? creep
4 ?-
但是,如果我在否定后使用空格,则效果很好。
2 ?- assert((only_child(X) :- mother(M,X),\+ (mother(M,_),\+ X==_))).
true.
3 ?- only_child(cathy).
false.
4 ?-
但是下面的代码对两者都适用,在“\+”之后使用空格并且不使用空格。
4 ?- \+ father(michael,cathy).
false.
5 ?- \+father(michael,cathy).
false.
6 ?-
谁能给我解释一下?它真的非常令人费解。我会很感激的。