12

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
  • 7,685
  • 16
  • 67
  • 102

2 Answers2

16

\+/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,422
  • 2
  • 30
  • 58
11

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,055
  • 31
  • 48