
При задании вопроса, кто кому является предком, необходимо получить все
варианты ответов, в частности, что Алексей - предок Ивана, Николая и Александра,
Иван - предок Николая и Александра, а Николай является предком только Александра.
Предикат
'предок'
можно легко определить, если использовать рекурсию. Тогда
определение предка становится не сложнее определения дедушки: X является предком
Y, если X является родителем некоторого Z, который является предком Y. При таком
определении
'отдаленность'
предков на каждом шаге уменьшается на единицу, и
становится возможным перебрать всех предков данного человека. Единственное
отличие данного предиката от предиката
'дедушка'
состоит в том, что для рекурсивного
определения требуется указание предельного случая, когда уменьшать отдаленность
уже не нужно. Таким предельным случаем является вариант, когда X является просто
родителем Y. Предельный случай рекурсии часто добавляется в базу данных в виде
факта. Итак окончательно получаем определение предиката
'предок'.
предок(X,Y)
:-
родитель(X,Y).
предок(X,Y)
:-
родитель(X,Z),
предок(Z,Y).
Характер доказательства рекурсивных предикатов часто бывает весьма сложным,
попробуйте, например, определить, в каком порядке будут получены все ответы для
приведенной выше базы данных.
6.3 ОСОБЕННОСТИ ИСПОЛЬЗОВАНИЯ ТУРБО-ПРОЛОГА.
Турбо-Пролог имеет ряд специфических черт, отличающих его от стандартного
Пролога,
причем эти его особенности имеют как достоинства, так и недостатки.
Прежде всего, Турбо-Пролог является компилятором, поэтому процесс решения
состоит во вводе базы и запуске программы на выполнение после компиляции. При
запуске программы на экране появляется подсказка-приглашение к вопросу: GOAL:
(ЦЕЛЬ) для ввода вопроса к базе. Сам вопрос вводится без символов '?-'. Все
полученные решения выводятся сразу без дополнительного ввода точки с запятой.
Интегрируемая среда системы Турбо-Пролог совпадает с аналогичной средой
Турбо-Паскаля версии 5.5 и позволяет редактировать, загружать, сохранять базы на
диск, отмечать в тексте ошибки компиляции и выполнять другие аналогичные
действия,
выбираемые из меню.
Компилятор Турбо-Пролога является одним из наиболее быстрых, но он при этом
накладывает ряд ограничений на возможные типы предикатов. Основное его отличие
от стандартного Пролога состоит в том, что Турбо-Пролог является типизированным
102