Декларативное и процедурное значение программ

В рассмотренных выше примерах всегда было возможно понять результаты про­граммы, не зная точно, как система фактически нашла эти результаты. Но иногда важно учитывать, как именно происходит поиск ответа в системе, поэтому имеет смысл проводить различие между двумя уровнями значения программ Prolog, a именно, между

• декларативным значением и

• процедурным значением.

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



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


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

Такой декларативный подход фактически часто позволяет гораздо проще состав­лять программы на языке Prolog по сравнению с такими типичными процедурно-ориентированными языками программирования, как С или Pascal. Но, к сожалению, декларативный подход не всегда позволяет решить все задачи. По мере дальнейшего изучения материала этой книги станет очевидно, что процедурные аспекты не могут полностью игнорироваться программистом по практическим причинам, связанным с обеспечением вычислительной эффективности, особенно при разработке больших программ. Тем не менее необходимо стимулировать декларативный стиль мышления при разработке программ Prolog и игнорировать процедурные аспекты до такой сте­пени, которая является допустимой с точки зрения практических ограничений.

Резюме

Программирование па языке Prolog представляет собой процесс определения отношений и выдачи системе запросов об этих отношениях.

• Программа состоит из предложений, которые относятся к трем типам: факты, правила и вопросы.

 

Отношение может быть определено на основе фактов путем задания .^-элементных кортежей объектов, которые удовлетворяют отношению, или пу­тем задания правил, касающихся этого отношения.

Процедура представляет собой набор предложений, касающихся одного и того же отношения.

Выполнение запросов об отношениях, передаваемых системе в виде вопросов, напоминает выполнение запросов к базе данных. Ответ системы Prolog на во­прос состоит из множества объектов, которые соответствуют этому вопросу.

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

 

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

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

 

• предложение, факт, правило, вопрос;

• голова предложения, тело предложения;

• рекурсивное правило, рекурсивное определение;

• процедура;

Глава 1.Введение в Prolog 43


• атом, переменная;

• конкретизация переменной;

• цель;

• цель, которая является достижимой, цель, которая достигнута;

• цель, которая является недостижимой, цель, которая не достигнута;

• перебор с возвратами;

• декларативное значение, процедурное значение.