Как я могу исправить этот круговой предикат в Прологе? - PullRequest
8 голосов
/ 15 сентября 2009

Почему это не работает для определения "женат" в Прологе?

married(X,Y):-married(Y,X).

Разрешены ли такие циклические предикаты? Как бы это исправить?

Спасибо

Ответы [ 3 ]

5 голосов
/ 15 сентября 2009

Простите, если я неправильно понял синтаксис, я давно не играл с Прологом.


Типичное решение состоит в том, чтобы ввести в уровни еще один уровень, например:

married(X, Y) :- wife(X, Y).
married(X, Y) :- wife(Y, X).

, а затем укажите отношения, используя вместо этого предложение жены:

wife(jane, bob).
wife(alice, john).

?- married(jane, X).
X = bob

Более подробную информацию можно найти здесь: CSc 8710, Дедуктивные базы данных и логическое программирование, глава 6 - Логика и базы данных , под 6.5 - Специальные отношения.

1 голос
/ 12 октября 2009

Одним из возможных решений является использование табуляции, см., Например, этот ответ .

1 голос
/ 15 сентября 2009

Насколько я понимаю, основная проблема заключается в том, что если допускаются циклические определения, хотя получающийся в результате язык самосогласован, то могут быть тонкие последствия, которые часто бывают нелогичными. Есть также соображения эффективности (круговые определения влекут за собой дополнительные издержки).

См. Это подробное обсуждение для более подробного объяснения и довольно разных точек зрения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...