lowerkey
lowerkey

Reputation: 8325

How to negate in Prolog

I'm new to PROLOG and am at the very beginning of the exercises on this page. Given the rules parent(X, Y) and male(X), I'm trying to define a rule mother(X, Y) as

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

However, in GNU Prolog I get the following error:

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

Upvotes: 17

Views: 42511

Answers (2)

Volker Stolz
Volker Stolz

Reputation: 7402

The solution is actually in the exercise file on that page:

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

As @Mog said, negation is the unary \+ operator.

Upvotes: 14

m09
m09

Reputation: 7493

\+/1 is the ISO Prolog predicate to "negate". Note that "negate" means here not provable at that point.

You can refer to this excellent answer by @false for more on the subject

Upvotes: 21

Related Questions