Упражнение. 2.10. Что произойдет, если системе Prolog будет задан следующий вопрос:

2.10. Что произойдет, если системе Prolog будет задан следующий вопрос:

?- х = f( X).

Должен ли этот запрос на согласование завершиться успехом или неудачей? В соответствии с определением операции унификации в логике он должен окончиться неудачей, но что должно произойти в соответствии с определением операции согласования, приведенным в разделе 2.2? Объясните, почему во многих реализациях Prolog на данный вопрос дается такой ответ:

х - f (f (£(f (f (£ (f (f (f [f (f (f (f (f ( . . .


Глава 2.Синтаксис и значение программ Prolog



Резюме

В первых двух главах рассматривалась основная часть языка Prolog, называемая также "чистым языком Prolog". К этой части определения языка применяется тер­мин "чистый", поскольку она тесно связана с формальной логикой. А далее в этой книге (главы 3-7) рассматриваются расширения, которые направлены на то, чтобы можно было лучше приспособить этот язык к некоторым практическим потребно­стям. В данной главе рассматривались перечисленные ниже важные вопросы.

Простыми объектами в языке Prolog являются атомы, переменные и числа. Структурированные объекты (или структуры) используются для представ­ления объектов, имеющих несколько компонентов.

• Структуры создаются с помощью функторов. Каждый функтор определяется своим именем и арностью.

Тип объекта распознается исключительно по его синтаксической форме.

• Лексической областью определения переменных является одно предложение. Поэтому под переменными с одним и тем же именем в двух предложениях подразумеваются две различные переменные.

• Структуры могут быть естественным образом представлены как деревья. Prolog может рассматриваться как язык для обработки древовидных информацион­ных структур.

• При проведении операции согласования берутся два терма и предпринимается попытка сделать их идентичными, конкретизируя переменные в обоих термах.

• В случае успешного выполнения операции согласованияее результатом стано­вится наиболее общая конкретизация переменных,

Декларативная семантика языка Prolog определяет, является ли цель истин­ной по отношению к данной программе, а если установлено, что она истинна, то определяет, какая конкретизация переменных является истинной.

• Запятая между целями обозначает конъюнкцию целей, а точка с запятой меж­
ду целями - дизъюнкцию целей.

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

Декларативное значение программ в "чистом языке Prolog" не зависит от по­рядка предложений и порядка целей в предложениях.

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

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

 

• Кроме переупорядочения, существуют другие более общие методы предотвра­щения бесконечных циклов в. тем самым, обеспечения процедурной надежно­сти программ.

• В данной главе рассматривались следующие понятия:

 

• объекты данных: атом, число, переменная, структура;

• терм;



Часть I. Язык Prolog


• функтор, арность функтора;

• главный функтор терма;

• согласование термов;

• наиболее общая конкретизация;

• декларативная семантика;

• экземпляр предложения, вариант предложения;

• процедурная семантика;

• выполнение целей.


Глава 2. Синтаксис и значение программ Prolog