Аннотация: Структура программы на Турбо-Прологе. Домены: стандартные, списковые, составные. Альтернативные домены. Программы: «Родственники», факториал, возведение в степень, числа Фиббоначи.
В этой лекции мы изучим специфику среды Турбо Пролог , отличия этой разновидности языка Пролог от других версий. Во-первых, Турбо Пролог — это компилируемый язык, а не интерпретируемый, как некоторые другие версии Пролога. Во-вторых, в Турбо Прологе принята строгая типизация данных (для повышения скорости трансляции и выполнения программ).
В начале программы на Турбо Прологе обычно располагаются разделы описаний объектов программы. В-третьих, в Турбо Прологе отсутствует возможность рассматривать правила как данные, т.е. добавлять и удалять их во время работы. В процессе выполнения программы в нее можно добавлять и из нее можно удалять только факты. В-четвертых, в нем нельзя определять операции . Многое из перечисленного можно считать недостатками, однако в целом все это приводит к тому, что Турбо Пролог отличается высокой скоростью компиляции и выполнения.
Пролог — примеры списков
Структура программы на Турбо Прологе
Программа на Турбо Прологе состоит из следующих семи разделов:
- директивы компилятора ;
- CONSTANTS — раздел описания констант ;
- DOMAINS — раздел описания доменов ;
- DATABASE — раздел описания предикатов внутренней базы данных;
- PREDICATES — раздел описания предикатов;
- CLAUSES — раздел описания предложений ;
- GOAL — раздел описания внутренней цели .
В программе не обязательно должны быть все эти разделы. Так, например, она может состоять из одного описания цели:
GOAL write(«hello»),readchar(_).
Эта программа, вполне в императивном духе, выведет сообщение (с помощью стандартного предиката write ) и будет ожидать нажатия пользователем любой клавиши (стандартный предикат readchar читает символ).
Однако, как правило, программа содержит, по меньшей мере, разделы PREDICATES и CLAUSES .
Если программа запускается в среде разработки Турбо Пролога, то раздел GOAL необязателен. При написании же программы, не зависящей от среды разработки, в ней необходимо указать внутреннюю цель .
В программе может быть несколько разделов описаний DOMAINS , PREDICATES , DATABASE и CLAUSES . Однако разделов GOAL не может быть в программе более одного.
Порядок разделов может быть произвольным, но при этом константы , домены и предикаты должны быть определены до их использования. Однако в разделе DOMAINS можно ссылаться на домены , которые будут объявлены позже.
Рассмотрим разделы немного подробнее.
Директивы компилятора
В самом начале программы можно расположить одну или несколько директив компилятора , которые дают компилятору дополнительные инструкции по обработке программы.
Давайте для примера рассмотрим несколько наиболее широко используемых директив компилятора .
Директива trace применяется при отладке программы для трассирования. Этот процесс немного похож на пошаговое выполнение императивной программы с отслеживанием значений переменных. Трассировка позволяет пользователю наблюдать за ходом выполнения программы. Если после ключевого слова trace указаны имена предикатов через запятую, то трассировка идет только по этим предикатам.
Prolog 7. Обработка списков
В противном случае — по всем предикатам программы. После завершения отладки трассировку нужно выключить, чтобы компилятор мог осуществить оптимизацию хвостовой рекурсии , о которой рассказывалось в предыдущей лекции.
Во время исполнения программы при включенной трассировке в специальном окне трассировки будет отображаться следующая информация:
- после слова «CALL» будет указано имя выполняемого предиката (текущая подцель) и его параметры; *
- после слова «FAIL» будет выводиться имя текущей подцели, которая не была достигнута;
- после слова «RETURN» будет выводиться результат вычисления текущей подцели, в случае успеха. При этом если у подцели есть еще альтернативы, к которым возможен возврат, то перед именем предиката высвечивается звездочка (» * «);
- слово «REDO» перед именем предиката указывает на то, что произошел возврат и происходит вычисление альтернативного решения.
Переход от подцели к подцели вызывается нажатием функциональной клавиши F10. При этом в окне редактирования выполняющуюся подцель указывает курсор, она также отображается в окне трассировки с параметрами и дополнительной информацией.
Директива nowarnings используется для подавления предупреждения системы о том, что какая-то переменная встречается в предложении только один раз. Эту директиву стоит использовать только в хорошо отлаженных программах. Как правило, для подавления такого предупреждения ( «WARNING: The variable is only used once» ) достаточно заменить переменную, которая встретилась только один раз, на анонимную переменную.
С помощью директивы include , при компиляции в исходный текст, можно вставить содержимое некоторого файла.
Заметим, что многие директивы компилятора могут быть не только расположены в тексте программы, но и установлены в меню среды разработки Турбо Пролога ( Options-> Compiler Directives ). Значение директивы компилятора , указанное в тексте программы, имеет более высокий приоритет, чем значение, установленное в меню.
Раздел описания констант
Раздел, озаглавленный зарезервированным словом CONSTANTS , предназначен для описания констант . Объявление константы имеет вид:
Имя константы должно быть идентификатором, то есть оно может состоять из английских букв, цифр и знака подчеркивания, причем не может начинаться с цифры.
Каждое определение константы должно размещаться в отдельной строке.
CONSTANTS pi=3.14 bgi_path=»c:\prolog\bgi»
В разделе описания констант можно использовать в качестве первого символа имени константы прописные символы, потому что в этом разделе прописные и строчные символы не различаются. Однако при использовании констант в разделе описания предложений нужно задействовать в качестве первого символа имени константы только строчные символы, чтобы Пролог-система не восприняла константу как переменную.
Разделов описания констант может быть несколько, но каждая константа должна быть определена до ее первого использования.
Источник: intuit.ru
Структура программ в Прологе. Назначение разделов
Любая программа, написанная на Прологе (Prolog), состоит из пяти разделов.
Ключевые слова domains, database, predicates, goal и clauses отмечают начала соответствующих разделов.
раздел domains содержит определения доменов, которые описывают различные классы объектов, используемых в программе.
раздел database содержит утверждения базы данных, которые являются предикатами динамической базы данных. Если программа такой базы данных не требует, то этот раздел может быть опущен.
раздел predicates служит для описания используемых программой предикатов.
в разделе goal ормулируется назначение создаваемой программы. Это раздел описания цели. Составными частями при этом могут являться некие подцели, из которых формируется единая цель программы.
в раздел clauses заносятся факты и правила, известные априорно (утверждения). Это данные, необходимых для работы программы.
Большинство программ, однако, не содержит всех пяти названных разделов.
Источник: verim.org
Методическое пособие
Выполнение данного цикла лабораторных работ позволит освоить начальный этап программирования на языке Пролог и послужит толчком для дальнейшего более глубокого самостоятельного изучения языка.
Пролог ориентирован не на разработку решений, а на систематическое и формализованное описание задачи с тем, чтобы решение следовало из этого описания. Свое название Пролог получил от слов «ПРОграммирование на языке ЛОГики». На самом деле Пролог не считается чистым языком логического программирования, но его создание – важный этап в этом направлении.
1. Структура программы и синтаксис языка пролог
Программа на Прологе – это множество аксиом и правил, задающих отношения между объектами. Вычислением такой логической программы является вывод следствий из программы. Программа задает множество следствий, которое и представляет собой значение программы. Основные конструкции логического программирования термы и утверждения. Имеются три основных вида утверждений: факты, правила и вопросы и единственная структура данных – логический терм.
Факт– простейший вид утверждения, использующийся для констатации того, что выполнено некоторое отношение между объектами.
Этот факт утверждает, что Вера является женой Алекса. Другое название для факта или отношения – «предикат». Имена индивидов в предикате – «атомы».
Второй формой утверждения в логической программе является вопрос.Вопрос – это средство извлечения информации из логической программы. С помощью вопроса выясняется, выполнено ли некоторое отношение между объектами. Синтаксические вопросы и факты выглядят одинаково, однако их можно различить по контексту. Объект, записанный в разделе goal или в окне Dialog, называетсяцелью.
Простой вопрос состоит из одной цели.
В Турбопрологе константы могут иметь числовую или символьную форму. Число может быть целым или действительным: 0; -1; 123.4; 0.23Е-5. Константы, являющиеся атомами представляют собой последовательность символов, заключенных с двух сторон в двойные кавычки. При выводе на печать эти двойные кавычки обычно не печатаются. Существуют случаи, когда атомы не обязательно заключать в кавычки:
- атом, состоящий только из чисел, букв и символа подчеркивания и начинающиеся со строчной буквы;
- атом, состоящий целиком из специальных символов. К специальным символам относится:
Источник: studfile.net