Почему gprolog не связывает воедино использование modus ponens? - PullRequest
3 голосов
/ 06 августа 2011

Я читаю Learn Prolog Now , 1.1.2 База знаний 2 , где они пишут о связывании воедино использования modus ponens.

Файл KB2.pl:

listensToMusic(mia).
happy(yolanda).
playsAirGuitar(mia) :- listensToMusic(mia).
playsAirGuitar(yolanda) :- listensToMusic(yolanda).
listensToMusic(yolanda) :- happy(yolanda).

Когда запрос:

playsAirGuitar(yolanda).

передается в gprolog, он должен ответить yes, потому что ондолжен быть в состоянии сделать вывод из того факта, что Иоланда счастлива.

Но gprolog отвечает no.Почему это так?

1 Ответ

2 голосов
/ 06 августа 2011

Я думаю, что проблема в том, что пункты предиката listensToMusic / 1 разделены.

следующий код возвращает для меня yes:

listensToMusic(mia).
listensToMusic(yolanda) :- happy(yolanda).
happy(yolanda).
playsAirGuitar(mia) :- listensToMusic(mia).
playsAirGuitar(yolanda) :- listensToMusic(yolanda).

вы должны получить предупреждение как

warning: discontiguous predicate listensToMusic/1 - clause ignored
...