Начинаю работу с прологом, и я пытаюсь сделать несколько простых упражнений, однако довольно рано застрял... Я пытаюсь "сказать": майку нравятся все, если это мужчина или женщина, а не Майк. Но X \= mike
, похоже, игнорируется:
man(mike).
man(danny).
man(samuel).
man(henry).
woman(samantha).
woman(jane).
woman(betty).
woman(jenny).
likes(mike, X) :-
man(X);
woman(X),
X \= mike.
Майк появляется...
?- findall(X, likes(mike, X), L).
L = [mike, danny, samuel, henry, samantha, jane, betty, jenny].
Я предполагаю, что это потому, что пролог сначала оценивает правило man(X)
, поэтому Майку соответствует true
. Однако, если я изменю его на:
likes(mike, X) :-
X \= mike,
man(X);
woman(X).
Я возьму только женщин.
?- findall(X, likes(mike, X), L).
L = [samantha, jane, betty, jenny].
Вопрос как тогда это сделать? Спасибо!
Примечание. Я использую swi-prolog.