Описание языка и интерпретатора Пролога

                Каймин В.А., Каймин С.В., Уртминцев А.Г.

 

      1. Назначение языка и системы программирования Пролог

 

         Язык Пролог и система программирования Пролог предназначены для практикума по информатике с базами знаний, экспертными системами и изучения элементов матема­тической логики и принципов логического вывода на ЭВМ.

       Настоящая версия языка и системы программирования Пролог были созданы в 1989-1991 гг. для поддержки школьного и вузовского практикума по информатике на базе персональных компьютеров IBM PC.

       Первая версия интерпретатора Пролога была создана для школьных персональных компьютеров Ямаха в Крыму Серегем Кайминым и Андреем Уртминцевым в августе 1988 г. на языке Паскаль по модели Open Source.

       Данная версия интерпретатора Пролога вместе с базовым пакетом офисных программ поставлялась на всем спектре отечественных школьных ЭВМ и в том числе для отечественных компьютеров модели IBM PC.

       Спецификации настоящей версии языка Пролог были созданы В.А.Кайминым тогда же одновременно со сдачей первого пробного учебника по информатике для средних школ в соавторстве с А.Щеголевым и Д.Боголюбовым (Федюшиным).

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

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

       Среди современных систем наиболее широкое распространение через Интернет получили зарубежные интерпретаторы и системы программирования Visual Prolog, GNU Prolog и CWI Prolog.

       Система Visual Prolog - наиболее профессиональная коммерческая система логи­ческого программирования. Демонстрационную версию этой системы можно найти и загрузить через Интернет.

       Системы GNU Prolog и CWI Prolog - это системы логического программирования Open Source, свободно распространяемые и устанавливаемые на основе генеральной публичной лицензии GNU.

       Современные системы программирования на языке Prolog построены на тех же самых базовых принципах логического программирования и математических проце­дурах логического вывода, на которых были основаны и реализованы самые первые отечест­венные системы логического программирования.

      2. Описание языка Пролог

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

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

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

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

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

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

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

данные:

<факт>; [<факт>;...]

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

родитель(x,y) ¬ папа(x,y);                     – Родитель – это папа или мама

родитель(x,y) ¬ мама(x,y).

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

процедура:

[<факты>] <правило>; [<правило>; ...]

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

предок(x,y) ¬родитель(x,y);

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

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

программа:

<процедуры>; [<данные>;]

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

база данных:

<данные>; [<данные>; ... ]

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

база знаний:

<данные>; <правила>;

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

? мама( x,Вова );

? предок( x,Вова );

 

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

 

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

факт:

<имя>(<арг>[,<арг> ... ]);

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

имя:

<буква>[<буква><цифра> ... ]

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

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

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

<слово>[<слово> ...]

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

слово:

<буква>[<буква><цифра> ...]

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

число:

[–]<цифра>[<цифра> ..]

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

 

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

 

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

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

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

? <вопрос>[,<вопрос> ..];

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

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

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

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

? <имя>(<арг>[,<арг> ..]);

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

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

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

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

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

       Примеры имен:   дед ',  внук’,  x1 ',  оценка4 '   и т.п.

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

 

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

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

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

 

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

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

родитель(x,y) ¬ мама(x,y);

родитель(x,y) ¬ папа(x,y);

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

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

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

правило:

<заголовок> ¬ <определение>;

 

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

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

заголовок:

<имя>(<парам>[,<парам> ...])

 

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

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

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

<заголовок>[,<заголовок> ...]

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

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

       Нарушение порядка записи в вопросах и правилах может привести к значи­тельному изменению конечных результатов выполнения правил и процедур.

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

       Применение правил в Прологе совпадает с проверкой условий в логике. Соответственно форма записи обращений к правилам и процедурам в Прологе совпадает с формой записи предикатов в математической логике.

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

       Пример обращения к процедурам:

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

              x = зина

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

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

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

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

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

 

Предикат:

Смысл:

СУММА( x,y,z )

ПРОИЗВ( x,y,z )

ЧАСТНОЕ( x,y,z )

ОСТАТОК( x,y,z )

РАВНО( x,y )

БОЛЬШЕ( x,y )

МЕНЬШЕ( x,y )

{ x+y = z }

{ x*y = z }

{ [x/y] = z }

{ x – [x/y] = z }

{ x = y }

{ x > y }

{ x < y }

 

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

       Примеры:

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

              НЕТ

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

              z = 4

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

              x = 3

       Арифметические предикаты позволяют решать простейшие арифметические уравнения, автоматически производя соответствующие вычисления, если эти решения существуют.

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

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

              НЕТ

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

              z = 2

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

              r = 1.

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

              небольше(x,y) ¬ НЕ( БОЛЬШЕ(x,y) );

              неменьше(x,y) ¬ НЕ( МЕНЬШЕ(x,y) );

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

              ? РАВНО(5,z);

              z = 5

              ? РАВНО(x,миша);

              x = миша

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

              НЕТ.

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

может производиться с помощью следующих предикатов:

              ТОЧКА( x,y,c );

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

              ОКРУЖНОСТЬ( x,y,c);

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

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

Предикат:

Смысл:

Пример:

 ФОН(c)

задание цвета фона

ФОН(8)

 ТОЧКА(x,y,c)

вывод точки

ТОЧКА(0,0,2)

 

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

вывод отрезка линии

ЛИНИЯ(0,0,50,50,4)

 ОКРУЖНОСТЬ(x,y,c)

вывод окружности

ОКРУЖНОСТЬ(90,90,10, 6)

 ЗАКРАСКА(x,y,c)

закраска фигур

ЗАКРАСКА(10,40,8)

 

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

 

Предикат:

Смысл:

      Пример:

 

 ВЫВОД( <Значение> )

вывод набора значений

ВЫВОД ("имя", х)

 ВВОДСИМВ (s)

ввод символьных данных

 ВВОДЦЕЛ (n)

ввод числовых данных

 

 ПС

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

 

 

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

 

Предикат:

  Смысл:

      Пример:

 ИСТИНА

логическая константа

 

 

 ЛОЖЬ

логическая константа

 

 

 НЕ(<Предикат>)

отрицание предиката

НЕ(РАВНО(z,0))

 

       3. Основные возможности интерпретатора Пролога

 

       Интерпретатор Пролога может использоваться на персональных компьютерах IBM PC с операционной системой Windows или MS DOS. Для работы интерпретатора необходимы накопитель на жестком диске и оперативной памяти не менее 250 Кбайт.

         Интерпретатор находится на жестком диске в каталоге с именем PROLOG. Запуск интерпретатора проводится с помощью команды

> prolog

            Если запуск прошел успешно, то на экране появится изображение

 

(С)  Файл  Диалог  Окна                             Свободно: 303Кб. 18:40:54

-[_]--------------------- D:\PROLOG\FAMILY.PRL   ------------------1-[]-

 мама(зина,вова);                                                                                       

 папа(вова,лена);                                                                                         

 бабушка(x,z)<-мама(x,y),мама(y,z);                                                 

 бабушка(x,z)<-мама(x,y),папа(y,z);                                                   

                                                                                                                       

                                                                                                           

                                                                                                                         

                                                                                                             

                                                                                                                       

 

 F1 Подсказка  F3 Открыть  Alt-F3 Закрыть  F4 Диалог  F10 Меню

 

       Интерпретатор Пролога предоставляет следующие возможности:

       – работа в диалоге с базами данных и программами на Прологе;

       – поиск и чтение программ и баз данных, записанных на дисках;

       – ввод и редактирование новых программ и баз данных;

       – запись на диски новых или отредактированных программ;

       – вывод на печать программ и баз данных на Прологе.

            Диалог с системой программирования Пролог начинается нажатием клавиши F4.. Резуль­татом выполнения команды будет появление на экране окна диалога

 

  Файл   Редактор  Диалог                                                

                           ---- РЕДАКТОР —

    мама(

ДИАЛОГ

 

    папа (                  

 ? мама(x,вова);

 

    бабуш                

  x = зина

 

    бабуш

  ДРУГИХ РЕШЕНИЙ НЕТ          

 

 

 

 

 

 

 

 

 

 

 

 

    |F1 Подсказка  F3 Открыть  Alt-F3 Закрыть  F4 Диалог

         В режиме "Диалог" можно вводить вопросы по отношению к фактам и правилам, имеющимся в программе или базе данных, которые размещены в оперативной памяти ЭВМ. Поиск ответов на вопросы начинается нажатием клавиши ввода Enter. Ответы на вопросы выводятся здесь же в окне диалога вслед за вопросом.

  В окне диалога можно задать серию вопросов к базе знаний или программе на, вернуться к любому вопросу и запустить его еще раз с новыми данными, а также просматривать протокол диалога в любом порядке. Для завершения диалога необходимо закрыть окно диалога с помощью команды Alt–F3 – закрытие текущего окна.

         Для ввода и редактирования программ необходимо перейти в режим "Редактор".  Для перехода к вводу необходимо нажать клавишу F3 – открытие нового окна и приступить к построчному вводу текста. Ввод и редактирование текстов программ на Прологе выполняется по правилам, традиционным для редакторов текстов.

Для операций с файлами на дисках – записи, чтения, поиске, необходимо перейти в режим "Файл" нажатием клавиши  F2 – работа с файлами. Результатом будет появление на экране следующего меню:

  Открыть..       F3 

  Сохранить     F2  

  Сохранить как..   

  Смена Каталога..

  Вызов DOS          

  Выход         Alt-X

 

         При переходе в режим "Открытие файлов" на экране появится окно:

 

-[_]          ---- Открыть окно —

                                                                                         

    Имя                                                                            

     *.*

    Файлы

     APP.PRL            

PROLOG.EXE

Открыть

     BLOK1.PRL       

PROLOG.HLP

Отмена

     FAMILY.PRL    

..\

Помощь

     HOM1.PRL

 

 

     HOMES.PRL     

 

 

                                                                                         

   D:\PROLOG\*.*                                                          

   APP.PRL      0                         Сен  8, 1991   5:01pm

       Для записи программ на диски необходимо перейти в режим работы с файлами (F2 – работа с файлами) и выбрать один из двух режимов:

          Сохранить F2

          Сохранить как ...

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

 

[_]         ------ Сохранить как -------

   Новое имя:    D:\PROLOG\HOMES.PRL            

                                                                Окей    Отмена

                                                    

       Для завершения работы необходимо перейти в меню "Файл" и указать в нем "Выход". Этого же можно достичь нажатием клавиш Alt – X.    Если в каком-либо окне измененная, но несохраненная программа, то вы будете предупреждены об этом.



Hosted by uCoz