16

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)
| ?- 
lowerkey
  • 8,105
  • 17
  • 68
  • 102

2 Answers2

20

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

Community
  • 1
  • 1
m09
  • 7,490
  • 3
  • 31
  • 58
14

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

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

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

Volker Stolz
  • 7,274
  • 1
  • 32
  • 50