Reputation: 8325
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
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
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