logo search
Prolog

Раздел описания внутренней цели

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

Пример. Запишем полностью реализацию на Турбо Прологе той базы знаний про мам и бабушек, которую мы рассматривали в качестве примера в третьей лекции. Нажимаем комбинацию клавиш Alt+E (от Editor), попадаем в редактор. Набираем код, приведенный ниже.

DOMAINS /* раздел описания доменов */

s=string /* вводим синоним для строкового типа данных */

PREDICATES /* раздел описания предикатов */

mother(s,s) /* предикат мама будет иметь два аргумента строкового типа*/

grandmother(s,s) /* то же имеет место и для предиката бабушка */

CLAUSES /* раздел описания предложений */

mother("Наташа","Даша"). /* "Наташа" и "Даша" связаны отношением мама */

mother("Даша","Маша"). /* "Даша" и "Маша" также принадлежат отношению мама */ grandmother(X,Y):- /* X является бабушкой Y, если найдется такой Z, что */

mother(X,Z), /* X является мамой Z, а */

mother(Z,Y). /* Z является мамой Y */

Для запуска программы нажимаем Alt+R (Run). Так как раздела описания внутренней цели в нашей программе не было, Пролог система выведет приглашение на ввод внешней цели ("GOAL:"). Вводим вопросы, наблюдаем результаты. Повтор предыдущей цели F8.

Теперь давайте рассмотрим некоторые наиболее употребляемые стандартные предикаты. Начнем с предикатов, предназначенных для вывода и ввода.