Я очень новичок в Прологе, и мне дали это задание.
Мой код выглядит следующим образом:
relatives(cindy,tanya).
relatives(tanya,alan).
relatives(alan,mike).
relatives(kerry,jay).
relatives(jay,alan).
isRelated(X,Y):-
relatives(X,Y).
isRelated(X,Y):-
relatives(X,Z),
isRelated(Z,Y).
Достаточно просто.Это показывает, что если:
?- isRelated(cindy,mike).
Пролог вернет true.Теперь я застрял на том, как заставить его возвращать значение true, если:
?- isRelated(mike,cindy).
Я пытался придумать идеи, например, если isRelated (Z, Y) возвращает false, затем переключить X и Yи снова запустите isRelated.Но я не уверен, что Пролог допускает такую идею.Любые советы или рекомендации будут с благодарностью.Спасибо!
ОБНОВЛЕНИЕ: ************************************
Итак, я добавил:
isRelated(X,Y):-
relatives(X,Y);
relatives(Y,X).
Это удовлетворит "прямые" отношения, но достаточно просто, я обнаружил, что это не удовлетворяет косвенным отношениям.
Я действительно хочу сделать что-то вроде, если первоначальный запрос:
isRelated(mike,cindy)
не пройден, попробуйте и посмотритеесли обратное верно при переключении X и Y:
isRelated(cindy,mike)
Это определенно вернет true.Я просто не знаю, как сделать это синтаксически в Прологе.