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