Раздел описания предложений

Раздел описания предложений начинается со служебного слова clauses. Этот раздел можно считать основным разделом программы, потому что именно в нем содержатся факты и правила, реализующие пользовательские предикаты. Все предикаты, которые применяются в этом разделе и не являются стандартными предикатами, должны быть описаны в разделе описания предикатов или в разделе описания предикатов базы данных.

Предложения, у которых в заголовке указан один и тот же предикат, должны идти друг за другом. Такой набор предложений называется процедурой. Программу на Прологе принято оформлять по следующим правилам:

- между процедурами пропускается пустая строка;

- тело правила записывается со следующей строки, после строки, в которой был заголовок, с отступом;

- каждую подцель записывают на отдельной строке, одну под другой.

Эти правила не являются обязательными, но они делают программу более читабельной.

Раздел описания целевого запроса

Раздел описания внутренней цели программы или внутрипрограммного целевого запроса начинается с зарезервированного слова GOAL. В соответствии с запросом осуществляется поиск только первого решения, а для получения всех возможных решений нужно предпринимать дополнительные действия.

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

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

Пример. Определить, кто является бабушкой, исходя из имеющихся сведений о том, кто является мамой.

domains /* раздел описания областей определения */

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

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

mother(s,s) /*мама*/

grandmother(s,s) /*бабушка*/

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

mother("Наташа","Даша"). /*"Наташа" является мамой

для "Даша"*/

mother("Даша","Маша"). /* "Даша" является мамой

для "Маша”*/


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: