Название: Информатика

Жанр: Информатика

Рейтинг:

Просмотров: 12655


6. краткое описание языка пролог

 

6.1. Базовые понятия языка Пролог

 

Основными понятиями в языке Пролог являются факты, правила и вопросы. Из фактов и правил образуются описания данных, процедур и программы на языке Пролог. Вопросы — это основное средство ведения диалога с базами знаний и программами, имеющимися в памяти ЭВМ.

Факты в Прологе служат для описания конкретных данных и простейших сведений. Примеры фактов:

 

мама (зина, вова);              — Зина — мама Вовы

папа (миша, вова);             — Миша               — папа Вовы

 

Группы фактов могут образовывать данные. Совокупность данных, размещаемых на дисках, образует базы данных. Общее определение данных в Прологе:

 

данные:

 

Правила используются для описания определений, процедур принятия решений и обработки данных. Примеры использования правил для описания определения понятия «родитель»:

 

родитель (х,у) ← папа (х,у);              — Родитель — это папа или мама

родитель (х,у) ← мама (х,у);

 

Процедуры образуются из некоторых групп правил. Общая форма описанияпроцедур в Прологе:

 

процедура:

 

Пример описания рекурсивной процедуры, в которой определяемое понятие задается через самое себя:

 

предок (х,у) ← родитель (х,у);

предок (x,z) ← родитель (х,у), предок (y,z);

 

Программа на Прологе — это совокупность процедур над определенными данными:

 

программа:

 

Описания баз данных на Прологе образуют совокупность описаний данных:

 

база данных:

 

Базы знаний на Прологе описываются наборами фактов и правил определения обобщенных понятий над ними:

 

база знаний:

 

Вопросы в языке Пролог служат запросами к базам данных и знаний, а также обращениями к процедурам и программам. Примеры вопросов:

 

? мама (х,вова)

? предок (х,вова)

 

6.2. Описания фактов

 

Факты в языке Пролог описываются в следующей форме:

 

факт:

 

Описание факта начинается с имени. В роли имен могут использоваться любые последовательности букв и цифр, начинающиеся с буквы:

 

имя:

 

Буквы могут быть выбраны из русского и латинского алфавитов.

После имени в описаниях фактов задается список аргументов, заключаемых в круглые скобки. В конце описания каждого из фактов ставится точка с запятой.

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

 

Словосочетание:

 

Слова, как и имена, — это любые последовательности из букв и цифр, начинающиеся с букв:

 

слово:

 

Числа в данной реализации Пролога — это только целые числа (отрицательные — со знаком минус):

 

число:

 

Примеры записи чисел — 0, 1, +3, —25.

 

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

 

6.3. Правила записи вопросов

 

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

Общая форма записи сложносоставных вопросов:

 

сложный вопрос:

 

В сложносоставных вопросах составляющие его подвопросы разделяются запятыми. Любой вопрос в Прологе начинается со знака вопроса «?» и заканчивается знаком «точка с запятой». Пример слож-носоставного вопроса:

 

? папа (х,у), папа (у,вова);

 

Простые вопросы имеют следующую форму записи:

 

простой вопрос:

 

Здесь <имя> — это имя некоторого факта или правила в программе или базе знаний. Количество аргументов в таком простейшем вопросе должно строго совпадать с количеством аргументов (параметров) в описаниях соответствующих фактов и правил.

 

В роли аргументов в вопросах могут указываться как конкретные значения, так и переменные. Если в вопросе указаны только конкретные значения, то ответом будет логическое значение ДА или НЕТ. Если же в вопросе указываются переменные, то при положительном ответе дополнительным результатом будет вывод конкретных значений переменных, указанных в исходном вопросе.

 

В роли переменных в Прологе могут указываться латинские и русские буквы, как строчные, так и прописные: а, b, с, ..., х, у, z; A, В, С, ..., X, Y, Z; а, б, в, ... , э, ю, я; А, Б, В, ..., Э, Ю, Я.

 

Кроме того, в качестве имен переменных могут употребляться любые слова и словосочетания, заканчивающиеся знаком апострофа ['].

 

Примеры имен: дед ', х1 ', оценка4 ' и т. п.

 

Кроме того, в вопросах и правилах на Прологе аргументы могут иметь неопределенные значения. Для этого вместо конкретных значений или имен переменных в вопросе указывается знак подчеркивания [ _ ].

 

Пример вопроса с использованием неопределенных значений:

 

? мама (мать', _ );

 

Ответом на указанный вопрос будет перечень имен всех матерей, сведения о которых имеются в базе знаний.

 

6.4. Запись правил и процедур

 

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

 

родитель (х,у) ← мама (х,у);

родитель (х,у) ← папа (х,у);

бабушка (x,z) ← мама (х,у), родитель (y,z);

дедушка (x,z) ← папа (х,у), родитель (y,z);

 

Общая форма записи правил на Прологе:

 

правило:

 

Здесь <заголовок> отделяется от <определения> двумя знаками: ← «меньше» и «тире». В конце правила записывается «точка с запятой».

 

Заголовки правил имеют следующую форму:

 

заголовок:

 

Здесь <имя> — это любое слово или словосочетание. В роли параметров в заголовках правил могут указываться переменные или конкретные значения либо неопределенные значения с помощью знака подчеркивания [ _ ].

Описание заголовка служит образцом записи обращений к правилам и процедурам. Определения в правилах образуются из обращений к другим правилам и процедурам, а также из запросов к данным и встроенным процедурам Пролога. Общая форма записи определений в правилах:

 

определение:

 

Запросы и определения отделяются в описаниях правил запятыми и записываются по тем же правилам, что и заголовки.

 

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

 

Результатом выполнения любых процедур и правил в Прологе всегда являются логические значения — ДА либо НЕТ, соответствующие успеху или неуспеху их применения. В этом смысле применение правил в Прологе совпадает с проверкой условий в логике. Соответственно форма записи обращений к правилам и процедурам в Прологе совпадает с формой записи предикатов в математической логике.

 

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

 

Пример такого обращения:

 

? родитель (х,вова)

х = зина

 

Полученный ответ имеет двойной результат: во-первых, подтверждение истинности наличия «родителей» у «вовы», а во-вторых, конкретизация переменной «х» в обращении к процедуре «родитель» с именем «вова», которая дает значение «х = зина».

 

Кроме конкретизации значений переменных в запросах и обращениях результатами выполнения процедур и правил в Прологе могут быть различного рода побочные эффекты — вывод на экран линий, точек, картинок, сообщений, запись и считывание данных и т. п.

 

В этом смысле результаты выполнения процедур и программ на Прологе могут быть эквивалентны результатам выполнения программ на других языках программирования.

 

6.5. Встроенные предикаты Пролога

 

Для операций над числами в рассматриваемой версии Пролога имеются следующие арифметические предикаты:

 

Предикат:                              Смысл:

 

СУММА (x,y,z)                                    х + у = z

ПРОИЗВ (x,y,z)                                    х*у = z

ЧАСТНОЕ (x,y,z)                 [х/у] = z

ОСТАТОК (x,y,z)                 х - [х/у] = z

РАВНО (х,у)                                         х = у

БОЛЬШЕ (х,у)                                      х > у

МЕНЬШЕ (х,у)                                     х < у

 

Арифметические предикаты по смыслу и функциям существенно отличаются от арифметических операций в традиционных языках программирования. Прежде всего любой из этих предикатов вырабатывает логическое значение ИСТИНА или ЛОЖЬ в зависимости от того, имеет или не имеет решение арифметическая задача, представляемая предикатом.

Примеры:

? СУММА (2,2,5)

НЕТ

? СУММА (2,2,z)

z=4

? СУММА (х,2,5)

х = 3

 

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

 

? ПРОИЗВ (2,у,5)

НЕТ

? ЧАСТНОЕ (5,2,z)

z= 2

? ОСТАТОК (5,2,r)

г = l

 

Предикаты БОЛЬШЕ и МЕНЬШЕ вместе с предикатом РАВНО могут использоваться для сравнения различных численных переменных и констант. А предикаты «неменьше» и «небольше» могут быть определены через отрицание предикатов БОЛЬШЕ и МЕНЬШЕ:

 

небольше (х,у) ← НЕ (БОЛЬШЕ (х,у));

неменьше (х,у) ← НЕ (МЕНЬШЕ (х,у));

 

Предикат РАВНО может использоваться также для сравнения значений переменных и констант. При этом переменные могут быть и числовыми, и символьными, и других типов. Примеры:

 

? РАВНО (5,z)

z = 5

? РАВНО (х.миша)

х = Mишa

? РАВНО (коля,оля)

НЕТ

 

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

 

ТОЧКА (х,у,с);

ЛИНИЯ (x,y,u,v,c);

ОКРУЖНОСТЬ (х,у,с);

 

где (х,у) и (u,v) — координаты точек на экране, а с — цвет точки. Конкретные значения кодов цветов и диапазоны значений координат точек на экране зависят от типа ЭВМ.

 

А. Графические предикаты:

 

Предикат:                              Смысл:                                  Пример:

 

ФОН (с)                                 задание цвета фона            ФОН (8)                

ТОЧКА (х,у,с)                                      вывод точки                                         ТОЧКА (0,0,2)

ЛИНИЯ (x,y,u,v,c)               вывод отрезка линии         ЛИНИЯ (0,0,50,50,4)

ОКРУЖНОСТЬ (х,у,с)        вывод окружности             ОКРУЖНОСТЬ (90,90,10, 6)

ЗАКРАСКА (х,у,с)              закраска фигур                                   ЗАКРАСКА (10,40,8)

 

Б. Предикаты ввода-вывода:

 

Предикат:                              Смысл:                                  Пример:

 

ВЫВОД (<3начение>)       вывод набора значений   ВЫВОД («имя», х)

ВВОДСИМВ (s)                                   ввод символьных данных

ВВОДЦЕЛ (n)                                      ввод числовых данных

ПС                                                          перевод строки

 

В. Логические предикаты:

Предикат:                              Смысл:                                  Пример:

 

ИСТИНА                              логическая константа

ЛОЖЬ                                                    логическая константа

НЕ (<Предикат>)                                 отрицание предиката      НЕ (РАВНО (z,0))

 


Оцените книгу: 1 2 3 4 5