SWIPrologで否定を使用することについて奇妙な質問があります。否定"\+"の後にスペースを入れずに次のコードを使用すると、エラーが発生します。
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 ?-
誰かが私にこれを説明できますか?その本当に非常に不可解です。本当にありがたいです。