Недавно я начал изучать Prolog
и столкнулся с проблемой.
В Prolog
загружено следующее:
likes(john, apple).
likes(john, pear).
likes(john, grapes).
likes(bill, mango).
likes(bill, apple).
Я пишу предикат all_like(What, List)
, который должен возвращать True
, если всем людям в List
нравятся фрукты в What
.
Eg:
all_like(apple,[john, bill]).
должен вернуться:
true ;
false.
all_like(grapes,[john, bill]).
должен вернуться:
false.
У меня такой код:
all_like(What,List) :- check_list(What,List).
check_list(What,[]) :- write('true').
check_list(What, [X|Rest]) :- likes(X,What), check_list(What,Rest).
check_list(What, [X|Rest]) :- \+ likes(X,What), write('false').
Мои результаты:
1-й запрос
true
true .
2-й запрос
false
true .
Кто-нибудь знает, почему я получаю такие результаты?
Каково значение выводимого второго логического значения?
Наконец, появляется ли .
после значимого пробела?
Спасибо за помощь.