Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Декларативная и процедурная семантика программ на языке Пролог.
Как и любой язык программирования, язык Пролог определяется синтаксисом и семантикой. Синтаксис ¾ это правила построения конструкций языка программирования, воспринимаемых транслятором. Другими словами, синтаксис представляет собой множество требований, которым должна удовлетворять любая программа. Под семантикой в алгоритмических языках понимается описание поведения вычислительной системы при обработке конструкций языка, т.е. семантика определяет смысл конструкций языка. Язык Пролог является не алгоритмическим, а декларативным языком программирования. Пролог¾программа лишь декларирует утверждения, определяющие свойства объектов и отношения между ними, поэтому семантика Пролог¾программ является декларативной. Декларативная семантика программы определяет, что истинно и при каких значениях переменных. С точки зрения декларативной семантики, утверждения программы являются формулами исчисления предикатов 1-го порядка. С другой стороны, чтобы определить истинностные значения вопроса, надо произвести вычисление целей запроса, поэтому логическая программа имеет также процедурную семантику. Процедурная семантика Пролог¾программы состоит в интерпретации входящих в программу утверждений с точки зрения процесса установления истинностных значений задаваемых в вопросе утверждений. Процедурная семантика ¾ это процедура вычисления списка целей на основе заданной декларативной программы. Назовем эту процедуру именем «Вычислить». Входными данными процедуры «Вычислить» являются логическая программа и список целей (вопрос).
Выходные данные процедуры «Вычислить» ¾ признак Успех/неуспех и конкретизация переменных. Процедурная семантика языка Пролог определяет встроенные в Пролог¾систему механизмы логического вывода. Рассмотрим простейшие механизмы логического вывода. v Факты в программе не содержат переменных, а v Факты в программе не содержат переменные, v Факты в программе не содержат переменных, Вычислительная модель логической программы. Унификация термов.
Основой вычислительной модели языка Пролог является алгоритм унификации. Унификация (или сопоставление) — основной шаг процесса вычисления запроса, именно в результате унификации происходит конкретизация переменных и обеспечивается продвижение к успешному завершению логического вывода запроса. Операндами операции унификации являются логические термы. Термы унифицируются по следующим правилам: 1. Если термы Т1 и Т2 — константы, то они унифицируются только в том случае, когда они одинаковы. Целые и вещественные числа сопоставимы только с равными им числам. Атомы сопоставимы только с идентичными атомами. Строки сопоставимы с одинаковыми строками. 2. Если терм Т1—константа или составной терм, а Т2 — неконкретизированная переменная, не содержащаяся в Т1, то Т1 и Т2 унифицируются, причем в результате переменная Т2 конкретизируется значением Т1. 3. Если термы Т1 и Т2 — неконкретизированные переменные, то их унификация успешна всегда, причем в результате унификации эти переменные становятся сцепленными, то есть при конкретизации одной из них, другая одновременно конкретизируется тем же значением. 4. Если Т1 и Т2 ¾составные термы, то Т1 и Т2 унифицируются успешно, когда они имеют одинаковые главные функторы и арности, и каждая пара соответствующих компонент составных термов успешно унифицируется. При выполнении логического вывода скрыто от пользователя выполняется большое число операций унификации, обусловленных встроенным в Пролог¾систему алгоритмом логического вывода. Однако, у программиста имеется возможность задать в качестве одной из целей явное выполнение унификации двух термов с помощью операции сопоставления ‘=’. Знак ‘\=’ является знаком отрицания сопоставления. Пусть Т1 и Т2 ¾ произвольные термы. Выражение Т1=Т2 ¾ истина, когда термы Т1 и Т2 унифицируемы (сопоставимы). Выражение Т1\=Т2 ¾истина, когда Т1 и Т2 не сопоставимы. Рассмотрим примеры использования операций сопоставления и отрицания сопоставления. Пример 4.2.1. ?¾2+1=1+2. no Составные термы 2+1 и 1+2 не сопоставимы, и операция сопоставления этих термов неуспешна. Пример 4.2.2. ?¾2+1\=1+2. yes Операция отрицания сопоставления термов 2+1 и 1+2 успешна. Пример 4.2.3. Операцию отрицания сопоставления можно использовать в правилах. Например, надо написать правило с заголовком sister(X,Y). Предикат sister(X,Y)¾истинен, если X¾сестра Y. Правило записывается следующим образом: sister(X,Y) :¾parent(Z,X),parent(Z,Y),person(X,’ж’,_),X\=Y. Если в Пролог¾программе записаны утверждения примера в пункте 3.2.5, то в ответ на вопрос, кто является сестрой Y? мы получим 3 ответа: Ответ 2 читается как“Анна ¾ сестра Пат”, а ответ 3 означает “Пат ¾ сестра Анны”. Это два различных ответа, с точки зрения выше приведенной программы.
|
|||||
Последнее изменение этой страницы: 2018-04-12; просмотров: 523. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |