Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Рлп.doc
Скачиваний:
3
Добавлен:
18.09.2019
Размер:
279.55 Кб
Скачать

7 И 8 и 20(согласование)вопрос. Декларативная семантика процедурной семантиками

Под семантикой  в алгоритмических языках понимается описание поведения вычислительной системы при обработке конструкций языка, т.е. семантика определяет смысл конструкций языка.  Язык Пролог является не алгоритмическим, а декларативным языком программирования. Пролог-программа лишь декларирует утверждения, определяющие свойства объектов и отношения между ними, поэтому семантика Пролог-программ является декларативной. Декларативная семантика программы определяет, что истинно и при каких значениях переменных. С точки зрения декларативной семантики,  утверждения программы являются формулами исчисления предикатов 1-го порядка.  До сих пор во всех наших примерах всегда можно было понять результаты работы программы, точно не зная, как система в действительности их нашла. Поэтому стоит различать два уровня смысла программы на Прологе, а именно: декларативный смысл  процедурный смысл. Декларативный смысл касается только отношений, определенных в программе. Таким образом, декларативный смысл определяет, что должно быть результатом работы программы. С другой стороны, процедурный смысл определяет еще и как этот результат был получен, т. е. как отношения реально обрабатываются пролог - системой. Способность пролог - системы прорабатывать многие процедурные детали самостоятельно считается одним из специфических преимуществ Пролога. Это свойство побуждает программиста рассматривать декларативный смысл программы относительно независимо от ее процедурного смысла. Поскольку результаты работы программы в принципе определяются ее декларативным смыслом, последнего (опять же в принципе) достаточно для написания программ. Этот факт имеет практическое значение, поскольку декларативные аспекты программы являются, обычно, более легкими для понимания, нежели процедурные детали. Чтобы извлечь из этого обстоятельства наибольшую пользу, программисту следует сосредоточиться главным образом на декларативном смысле и по возможности не отвлекаться на детали процесса вычислений. Последние следует в возможно большей мере предоставить самой пролог - системе. Такой декларативный подход и в самом деле часто делает программирование на Прологе более легким, чем на таких типичных процедурно-ориентированных языках, как Паскаль. К сожалению, однако, декларативного подхода не всегда оказывается, достаточ-но. Далее станет ясно, что, особенно в больших программах, программист не может полностью игнорировать процедурные аспекты по соображениям эффективности вычислений. Тем не менее, следует поощрять декларативный стиль мышления при написании пролог - программ, а процедурные аспекты игнорировать в тех пределах, которые устанавливаются практическими ограничениями. Различают два типа смысла пролог - программ: декларативный и процедурный. Декларативный подход предпочтительнее с точки зрения программирования. Тем не менее, программист должен часто учитывать также и процедурные детали. Давайте еще раз взглянем на различия между декларативной и процедурной семантиками. Рассмотрим предложение Р  :-   Q, R. где Р, Q и R имеют синтаксис термов.  Приведем некоторые способы декларативной интерпретации этого предложения: Р - истинно, если Q и R истинны.  Из Q и R следует Р. А вот два варианта его «процедурного» прочтения: Чтобы решить задачу Р, сначала реши подзадачу Q, а затем - подзадачу R. Чтобы достичь Р, сначала достигни Q, а затем R. Таким образом, различие между «декларативным» и «процедурным» прочтениями заключается в том, что последнее определяет не только логические связи между головой предложения и целями в его теле, но еще и порядок, в котором эти цели обрабатываются. Формализуем теперь декларативный смысл. Декларативный смысл программы определяет, является ли данная цель истинной (достижимой) и, если да, при каких значениях переменных она достигается. Для точного определения декларативного смысла нам потребуется, понятие конкретизации предложения. Конкретизацией предложения С называется результат подстановки в него на место каждой переменной некоторого терма. Вариантом предложения С называется такая конкретизация С, при которой каждая переменная заменена на другую переменную. Например, рассмотрим предложение: имеет_ребенка( X) :- родитель( X, Y). Приведем два варианта этого предложения: имеет_ребенка( А)    :- родитель( А, В).  имеет_ребенка( XI)   :- родитель( XI, Х2). Примеры конкретизации этого же предложения: имеет_ребенка( питер) :- родитель( питер, Z).  имеет_ребенка( барри) :-   родитель( барри, маленькая(каролина) ). Пусть дана некоторая программа и цель G. Тогда, в соответствии с декларативной семантикой, можно утверждать, что Цель G истинна (т.е. достижима или логически следует из программы) тогда и только тогда, когда (1) в программе существует предложение С, такое, что (2)существует такая его (С) конкретизация I,что (a) голова I совпадает с G и (b) все цели в теле I истинны Это определение можно распространить на вопросы следующим образом. В общем случае вопрос к пролог - системе представляет собой список целей, разделенных запятыми. Список целей называется истинным (достижимым), если все цели в этом списке истинны (достижимы) при одинаковых конкретизациях переменных. Значения переменных получаются из наиболее общей конкретизации.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]