如何在Prolog中否定

low*_*key 8 prolog

我是PROLOG的新手,并且正处于本页练习的最开始阶段.给定父(X,Y)和男(X)的规则,我试图将规则母(X,Y)定义为

mother(X, Y) :-
    not(male(X)),
    parent(X, Y).
Run Code Online (Sandbox Code Playgroud)

但是,在GNU Prolog中我收到以下错误:

| ?- mother(lina, julia).
uncaught exception: error(existence_error(procedure,not/1),mother/2)
| ?- 
Run Code Online (Sandbox Code Playgroud)

m09*_*m09 12

\+/1是ISO Prolog的谓词"否定".请注意,"否定"意味着此时无法证明.

有关此主题的更多信息,请参阅@false的优秀答案


Shi*_*iSi 6

该解决方案实际上位于该页面上的练习文件中:

female(X) :- \+ male(X).
Run Code Online (Sandbox Code Playgroud)

正如@Mog所说,否定是一元运算\+符.