prolog

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)
| ?- 

Solution

  • \+/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