Декларативное и процедурное значение программ
В рассмотренных выше примерах всегда было возможно понять результаты программы, не зная точно, как система фактически нашла эти результаты. Но иногда важно учитывать, как именно происходит поиск ответа в системе, поэтому имеет смысл проводить различие между двумя уровнями значения программ Prolog, a именно, между
• декларативным значением и
• процедурным значением.
Декларативное значение касается только отношений, определенных в программе. Поэтому декларативное значение регламентирует то, каким должен быть результат работы программы. С другой стороны, процедурное значение определяет также способ получения этого результата, иными словами, показывает, как фактически проводится обработка этих отношений системой Prolog.
Часть I. Язык Prolog
Способность системы Prolog самостоятельно отрабатывать многие процедурные детали считается одним из ее особых преимуществ. Prolog побуждает программиста в первую очередь рассматривать декларативное значение программ, в основном независимо от их процедурного значения. А поскольку результаты программы в принципе определяются их декларативным значением, этого должно быть (по сути) достаточно для написания программы. Такая особенность важна и с точки зрения практики, так как декларативные аспекты программ обычно проще для понимания по сравнению с процедурными деталями. Но чтобы полностью воспользоваться этими преимуществами, программист должен сосредоточиваться в основном на декларативном значении и, насколько это возможно, избегать необходимости отвлекаться на детали выполнения. Последние необходимо оставлять в максимально возможной степени для самой системы Prolog.
Такой декларативный подход фактически часто позволяет гораздо проще составлять программы на языке Prolog по сравнению с такими типичными процедурно-ориентированными языками программирования, как С или Pascal. Но, к сожалению, декларативный подход не всегда позволяет решить все задачи. По мере дальнейшего изучения материала этой книги станет очевидно, что процедурные аспекты не могут полностью игнорироваться программистом по практическим причинам, связанным с обеспечением вычислительной эффективности, особенно при разработке больших программ. Тем не менее необходимо стимулировать декларативный стиль мышления при разработке программ Prolog и игнорировать процедурные аспекты до такой степени, которая является допустимой с точки зрения практических ограничений.
Резюме
• Программирование па языке Prolog представляет собой процесс определения отношений и выдачи системе запросов об этих отношениях.
• Программа состоит из предложений, которые относятся к трем типам: факты, правила и вопросы.
• Отношение может быть определено на основе фактов путем задания .^-элементных кортежей объектов, которые удовлетворяют отношению, или путем задания правил, касающихся этого отношения.
• Процедура представляет собой набор предложений, касающихся одного и того же отношения.
• Выполнение запросов об отношениях, передаваемых системе в виде вопросов, напоминает выполнение запросов к базе данных. Ответ системы Prolog на вопрос состоит из множества объектов, которые соответствуют этому вопросу.
• В системе Prolog для определения того, соответствует ли объект вопросу, часто применяется сложный процесс, который связан с выполнением логического вывода, рассмотрением многих альтернатив и, возможно, перебора с возвратами. Все эти операции выполняются системой Prolog автоматически и, в принципе, скрыты от пользователя.
• Различаются два значения, программ Prolog: декларативное и процедурное. Декларативный подход является более привлекательным с точки зрения программирования. Тем не менее программисту также часто приходится учитывать процедурные детали.
• В данной главе представлены следующие понятия:
• предложение, факт, правило, вопрос;
• голова предложения, тело предложения;
• рекурсивное правило, рекурсивное определение;
• процедура;
Глава 1.Введение в Prolog 43
• атом, переменная;
• конкретизация переменной;
• цель;
• цель, которая является достижимой, цель, которая достигнута;
• цель, которая является недостижимой, цель, которая не достигнута;
• перебор с возвратами;
• декларативное значение, процедурное значение.