
- •1. ИСПОЛЬЗОВАНИЕ ЯЗЫКА ПРОЛОГ
- •2. ЛОГИЧЕСКИЕ ОСНОВЫ ЯЗЫКА ПРОЛОГ
- •2.1. Представление знаний и фактов
- •2.2. Исчисления логического типа
- •2.3. Исчисление резольвент
- •3. МЕХАНИЗМ РАБОТЫ ИНТЕРПРЕТАТОРА ПРОЛОГ-МАШИНЫ
- •Трассировка доказательства теоремы
- •4. ЯЗЫК ПРОЛОГ
- •4.1. Объявления
- •4.2. Данные и константы
- •Типы данных в Прологе
- •4.3. Управление возвратом
- •5. ВСТРОЕННЫЕ ПРЕДИКАТЫ И ФУНКЦИИ
- •5.1. Арифметические вычисления
- •5.2. Ввод и вывод
- •5.3. Текстовые окна и управление экраном
- •5.4. Обработка строк и преобразование типов
- •5.5. Базы данных
- •5.6. Вспомогательные средства
- •6. МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
- •ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА ПРОЛОГ

1 |
X = X' |
человек(X'), грек(X '), write(X ') |
2 |
X' = "Тьюринг" |
грек("Тьюринг"), write("Тьюринг") |
|
Неудача при совмещении для грек(…) с возвратом |
|
3 |
X ' = "Сократ" |
грек("Сократ"), write("Сократ") |
4 |
– |
write("Сократ") |
При записи программ и анализе доказательства следует учиты вать то, что одноименные переменные в различных предложениях (клозах) независимы и различны (смотри строку 2 в табл. 1), что следует из локальности области действия кванторов общности и не зависимости аксиом друг от друга.
4.ЯЗЫК ПРОЛОГ
4.1.Объявления
Система Turbo-Prolog является инструментальным средством и средой для написания и отладки программ на Прологе. В системе используется версия языка с предварительными описаниями всех объектов: доменов, предикатов в программах и в базах данных. В системе SWI-Prolog предварительных объявлений не требуется. Все необходимые сведения об объектах извлекаются из контекста про граммы. Имена используются для обозначения символических констант, предикатов и переменных. Имена содержат символы ла тинских букв, цифры и знак подчеркивания "_". Имена констант, пре дикатов и других объектов должны начинаться со строчной буквы. В языке предопределены имена ключевых слов, операций, стандарт ных предикатов, переопределение которых либо недопустимо, либо крайне нежелательно.
Программа в системе Turbo-Prolog содержит несколько секций, идентифицируемых ключевыми словами. Необходимо соблюдать последовательность включения секций: домены, глобальные доме ны, базы данных, предикаты, глобальные предикаты, цель, клозы. Несколько секций могут отсутствовать.
Объявления доменов начинаются с ключевого слова "domains" и содержат строки с описанием одного или нескольких имен доме нов вида :
<имя>[, <имя>, ...] = <тип>.
Тип значений домена может задаваться ссылкой на стандартные домены integer, real, char, symbol, string, указателем списка вида <тип>* , перечнем составных или простых объектов вида
f1(d11, ... , d1n); f2(d21, ... , d2m); ... ; fq(dq1, ... , dqk).
В этом же разделе описываются файлы: file = <имя1>; <имя2>;...; <имяn>.
Пример: domains
person, act = symbol age, hrice = integer company = person*
rel = pair(integer,integer); singl(integer); none namelist = symbol*
Глобальные домены и предикаты используются для разработки модульных программ и будут рассмотрены позднее. Описание баз данных начинается с ключевого слова "database" и содержит объяв ление предикатов, поиск которых следует вести не в тексте про граммы, а в базе данных, создаваемой при исполнении программы. Для наполнения и ведения базы данных имеются стандартные пре дикаты, рассматриваемые ниже.
Пример: database
who_is(person, age, string) value(symbol, rel)
Объявления предикатов начинаются с ключевого слова "predicates" и описывают количество и типы параметров, использу емых в программе предикатов. Turbo-Prolog требует описания всех предикатов, кроме стандартных, предопределенных в системе. Объ явление предиката имеет вид :
<имяпредиката>(<имядомена1>,...,<имядоменаn>)
Примеры : Predicates
doit(person, integer, string) start like(company) long_text(string*)
Цель, если она задана в тексте программы, описывается с клю чевым словом "goal" и включает список предикатов с параметрами, являющийся формулировкой теоремы. Список предикатов цели за канчивается символом "." – точка.
Примеры: goal start.
goal doit(X, 34, "Технический университет"), write(X).
Телом программы являются аксиомы или факты, оформленные в виде предложений или клозов, следующих за ключевым словом "clauses". Описание клоза содержит левую и правую части, соответ ствующие "плюс-" и "минус-части" аксиомы. Вместо разделителя ча стей ":–" можно использовать ключевое слово "if", вместо "," – "and".
Пример: clauses
doit(Who, Age, Work) :– write("Введи имя : "), readln(Who),search(Who, Age, Work).
doit(_, _, _) :– write("Нет информации !!!"), nl.
Параметрами предикатов могут быть переменные и константы соответствующих типов. В тех случаях, когда на параметр нет необ ходимости ссылаться в других предикатах минус-части аксиомы, можно использовать анонимные переменные, записываемые как единственный символ подчеркивания "_".
В любом месте программы, где уместно употребление раздели теля, можно разместить комментарий, начинающийся символами "/*" и заканчивающийся символами "*/" . Например:
/***********************************************/ /* Это пример комментария */ /***********************************************/
В отличие от системы Turbo-Prolog в SWI-Prolog программа со держит только объявления цели и аксиом (клозов). Цель задается предложением вида
:– <предикат>, … , <предикат>.
Объявления аксиом имеют аналогичный языку Turbo-Prolog вид. Программы на языке Пролог записываются и хранятся в отдель
ных файлах и вызываются для компиляции и исполнения. В TurboProlog это делается командами меню, в SWI-Prolog – предикатом