Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие_Пролог_часть1.doc
Скачиваний:
40
Добавлен:
13.11.2019
Размер:
1.36 Mб
Скачать

4. Семантика языка программирования Пролог.

4.1 Декларативная и процедурная семантика программ на языке Пролог.

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

Язык Пролог является не алгоритмическим, а декларативным языком программирования. Прологпрограмма лишь декларирует утверждения, определяющие свойства объектов и отношения между ними, поэтому семантика Прологпрограмм является декларативной.

Декларативная семантика программы определяет, что истинно и при каких значениях переменных. С точки зрения декларативной семантики, утверждения программы являются формулами исчисления предикатов 1-го порядка.

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

Процедурная семантика Прологпрограммы состоит в интерпретации входящих в программу утверждений с точки зрения процесса установления истинностных значений задаваемых в вопросе утверждений. Процедурная семантика  это процедура вычисления списка целей на основе заданной декларативной программы. Назовем эту процедуру именем «Вычислить».

Входными данными процедуры «Вычислить» являются логическая программа и список целей (вопрос).

Выходные данные процедуры «Вычислить»  признак Успех/неуспех и конкретизация переменных.

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

  • Факты в программе не содержат переменных, а вопрос  простой и основной. В этом случае используется правило совпадения: вопрос выводим из программы, если в программе имеется совпадающий с вопросом факт.

  • Факты в программе не содержат переменные, а вопрос  простой и неосновной. В этом случае для вывода можно применить правило обобщения факта: вопрос Q выводим из программы, если найдется подстановка, что вопрос Q выводим из программы. Процедура поиска ответа на простой, неосновной вопрос из программы, состоящей из фактов без переменных, сводится к поиску факта, являющегося примером вопроса. Побочным эффектом доказательства будет конкретизация переменных, входящих в вопрос. Конкретизацией называется присвоение переменной значения в процессе выполнения программы.

  • Факты в программе не содержат переменных, а вопросконъюнктивный и неосновной: ?G1,G2. Процедура поиска ответа на конъюнктивный, неосновной вопрос из программы, состоящей из фактов без переменных, сводится к поиску факта, являющегося примером цели G1, а затем после подстановки значений общих переменных в цель G2 производится поиск факта, являющегося примером цели G2 данного вопроса. Если такой факт обнаруживается, то выполняется конкретизация переменных цели G2, которые не являются общими с целью G1, и вычисление конъюнктивного вопроса завершается успешно.