- •Введение
- •1. Организация вычислительного процесса
- •2. Основные элементы языка
- •2.1. Имена
- •2.2. Типы данных
- •2.3. Константы и переменные
- •2.4. Программные секции Пролога
- •2.4.1. Секция Domains
- •2.4.2. Секция Ppredicates
- •2.4.3. Секция Database
- •2.4.4. Секция Clauses
- •2.4.5. Секция Goal
- •3. Примеры программ
- •3.1. Программы с фактами и простыми правилами
- •3.2. Рекурсии
- •3.3. Программирование циклов
- •3.4. Работа со списками
- •3.5. Нахождение пути на графе
- •3.6. Использование структур
- •Vife(X):–family(_,X,_). % X – жена
- •3.7. Динамическая база данных
- •It_is("хищник"),
- •Xpositive(X, y), !. % в базе данных
- •3.8. Обработка текстов
- •Verb( string ) % Глагол
- •4. Стандартные предикаты
- •4.1. Ввод/вывод
- •4.2. Управление экраном и оконная система
- •4.3. Обработка строк
- •4.4. Преобразование типов
- •4.5. Работа с базой данных
- •4.6. Управляющие предикаты
- •4.7. Прочие стандартные предикаты
- •4.8. Арифметические и логические предикаты
- •5. Использование языка Пролог для построения экспертных систем
- •5.1. Оболочка экспертной системыGeni
- •5.2. Оболочка экспертной системы pexpert
- •5.2.1. Синтаксис правил
- •5.2.2. Функции
- •5.2.3. Взгляд на работу программы
- •5.2.4. Команды верхнего уровня
- •5.2.5. Команды оценки правил
- •5.2.6. Команды, действующие во время ввода данных
- •Рекомендуемая литература
- •Приложение. Варианты лабораторных работ Лабораторная работа 1. Работа с простой базой данных
- •Лабораторная работа 2. Программа “Родственные отношения”
- •Лабораторная работа 3. Построение простой вопросно-ответной системы
- •Лабораторная работа 4. Работа со списками
- •Лабораторная работа 5. Нахождение пути на графе
- •Лабораторная работа 6. Работа с базой данных с использованием структур
- •Лабораторная работа 7. Построение экспертной системы
- •Лабораторная работа 8. Построение синтаксического анализатора
2. Основные элементы языка
2.1. Имена
Имена используются для обозначения переменных, символьных констант, объявлений типов и предикатов.
Имя может начинаться с любой латинской буквы или символа подчеркивания "_", затем следует любая комбинация букв, цифр и символа "_".
При образовании имен необходимо учитывать следующие правила:
- имена строковых констант должны начинаться с маленькой буквы;
- имена переменных должны начинаться с большой буквы или символа подчеркивания "_".
2.2. Типы данных
Имеется следующие стандартные типы данных:
symbol |
Символьная строка, которая начинается со строчной буквы или заключена в кавычки |
string |
Также символьная строка, но имеющая другое внутреннее представление |
char |
Отдельный символ, заключенный в апострофы |
integer |
Целое число в диапазоне от -32768 до 32767 |
real |
Любое вещественное число |
2.3. Константы и переменные
Константы Пролога должны быть записаны:
а) либо с маленькой буквы (исключая кириллицу):
fact1, summa, person ;
б) либо стоять в одинарных кавычках (отдельный символ) или бинарных кавычках (строковая константа):
'c' , "summa=", "сумма" ;
в) либо они являются числами, целыми или вещественными:
25, 0.5, 3.2e-4 .
Таким образом, константы могут быть любого из стандартных типов Пролога. В программе тип констант явно не указывается.
Переменные – это цепочки, состоящие из букв, цифр и символа подчеркивания. Имя переменной всегда начинается с прописной буквыили с символа подчеркивания:
X, Summa, List_of_members, _x23.
Переменная может иметь один из стандартных типов, или тип ее определяется в секции описания областей определения (типов) domaims. Можно также использовать так называемую анонимную переменную, которая записывается в виде одного символа подчеркивания.
2.4. Программные секции Пролога
Программа на Прологе состоит из нескольких программных секций, каждой из которых предшествует ключевое слово, представленное в следующей таблице:
Domains |
Определение типов данных |
Database |
Объявление предикатов базы данных |
Predicates |
Объявление предикатов |
Clauses |
Определение фактов или правил |
Goal |
Цель |
В программе необязательно наличие всех секций. Обычно в небольшой программе бывают разделы PredicatesиClauses.
В программе может использоваться только одна цель; если цель не указана, Пролог цель запросит. Обычно цель записывают в конце программы.
Ключевые слова разделов можно записывать прописными и строчными буквами.
Комментарии к программе записываются либо парами символов слэш-звездочка:
/* это комментарий,
он занимает несколько строк */
либо остаток строки записывается после знака процента:
% это тоже комментарий
2.4.1. Секция Domains
Для объявления секции domainsиспользуются следующие форматы:
1. Первый формат:
name = t ,
где name– имя Пролога, t– один из стандартных типов. Это объявление используется для объектов, которые синтаксически схожи, а семантически различны. Например, предложение
age, number = integer
объявляет два domainsцелого типа.
2. Второй формат:
mylist = elevent* ,
где mylist– объявление списка элементов,element– элемент, ранее описанный пользователем вDomainsлибо один из стандартных типов Турбо-Пролога, “*” обозначает список.Hапример,
namlist = integer*
объявляет список целых чисел.
3. Третий формат описывает сложную область определения, задает описание структур.
region = functor1(d1,d2,...); functor2(d3,d4,...);...
где regionобъявляет сложную область,functor1,functor2– имена альтернатив составной области,d1,d1,...,d3,d4 – один из типов Пролога, стандартный или определенный ранее в программе вDomains(описание типов может отсутствовать).
Пример:
object = int(integer); str(string)
mesto = sprava; sleva .
Данный способ указания Domainsпозволяет также рекурсивно описывать объекты сложных типов (деревьев).