Запросить отношение между двумя людьми в генеалогическом древе Prolog

Предположим, у меня есть следующий код в моем файле familyTree.pl:

male(tom).
male(bob).

female(lisa).
female(emily).

parent(tom, bob).
parent(lisa, bob).

morethanfriends(emily, bob).

father(X,Y) :- male(X), parent(X,Y).
mother(X,Y) :- female(X), parent(X,Y).
girlfriend(X,Y) :- female(X), (morethanfriends(X,Y); morethanfriends(Y,X)).
boyfriend(X,Y) :- male(X), (morethanfriends(X,Y); morethanfriends(Y,X)).

Теперь я хочу получить ответ на такие вопросы, как:

What is the relationship between Tom and Bob ?

What is the relationship between Lisa and Emily ?

Как я могу задать вышеупомянутые вопросы в прологе?

Единственное решение, которое я мог придумать, состояло в том, чтобы перебрать известные типы отношений, давая (Том, ​​Боб) или (Лиза, Эмили) в качестве параметра, и проверить, какой из них возвращает истину . Но; это решение кажется пустой тратой времени, когда количество известных типов отношений больше, чем несколько и / или существует цепная связь между данными двумя людьми (например: Лиза и Эмили: Лиза - мать парня Эмили).

5
задан Cihan Keser 23 December 2010 в 10:49
поделиться