Я пытаюсь написать правило в моей программе пролога, которая определяет, является ли кто-то другом брата.Exception Exception in Prolog Program
Например, если я нахожу brother_of (chris, X), он вернется к Рождеству, потому что Крис - брат крещения. Однако, когда я набираю это, я получаю исключение существования. Я включил факты, чтобы охватить все, но, может быть, это проблема в определении моего правила? Код ниже.
/* Facts */
female(ella).
female(jodi).
female(sonya).
female(jane).
female(christy).
female(mary).
male(arnold).
male(chris).
male(louis).
male(mark).
father(arnold).
father(louis).
father(mark).
mother(ella).
mother(jodi).
mother(jane).
mother(mary).
father_of(arnold, chris). /* arnold is the father of chris */
father_of(arnold, christy).
father_of(louis, mark).
father_of(mark, arnold).
mother_of(mary, chris).
mother_of(mary, christy).
mother_of(jane, arnold).
mother_of(ella, sonya).
mother_of(jodi, ella).
mother_of(jodi, mark).
/* Rules */
brother_of(X, Y) :-
male(X),
((father_of(Z, X), father_of(Z, Y));
(mother_of(W, X), mother_of(W, Y))),
X =\= Y.
Это сработало, спасибо! Но теперь, когда я спрашиваю брата (chris, X), он дважды возвращается к Рождеству. После того, как я вернусь в первый раз, я напечатаю «;» чтобы убедиться, что нет больше, чего не должно быть, поэтому он должен возвращать «нет», но снова возвращается к Рождеству. Есть идеи о том, почему? – aclark
Вам нужна цель [cut] (http://en.wikipedia.org/wiki/Cut_%28logic_programming%29): '!'. Спросите меня, нужна ли вам помощь по ее использованию (не знаю, если вы уже видели это в своих исследованиях или нет) – mgibsonbr
Я этого не видел. Как его использовать? – aclark