12

私はPROLOGを初めて使用し、このページの演習の最初の段階にいます。ルールparent(X、Y)とmale(X)が与えられた場合、ルールmother(X、Y)を次のように定義しようとしています。

mother(X, Y) :-
    not(male(X)),
    parent(X, Y).

ただし、GNU Prologでは、次のエラーが発生します。

| ?- mother(lina, julia).
uncaught exception: error(existence_error(procedure,not/1),mother/2)
| ?- 
4

2 に答える 2

15

\+/1「negate」するISOProlog述語です。ここで「否定」とは、その時点では証明できないことを意味することに注意してください。

この件に関する詳細については、@falseでこの優れた回答を参照できます。

于 2012-04-13T13:23:06.370 に答える
11

解決策は、実際にはそのページの演習ファイルにあります。

female(X) :- \+ male(X).

@Mogが言ったように、否定は単項演算\+子です。

于 2012-04-13T13:27:10.953 に答える