- •Введение
- •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. Построение синтаксического анализатора
4.3. Обработка строк
Предикаты обработки строк используются для разделения строк либо на список отдельных символов, либо на список заданных групп символов.
frontchar(String,FrontChar,RestString)
(string,char,string) – (i,o,o) (i,i,o) (i,o,i) (i,i,i) (o,i,i)
Разделяет заданную строку String согласно поточному шаблону на две части: первый символ FrontChar и оставшаяся часть строки RestString.
fronttoken(String,Token,RestString)
(string,string,string) – (i,o,o) (i,i,o)(i,o,i) (i,i,i) (o,i,i)
Разделяет строку, заданную параметром String, на лексему Token и остаток RestString согласно поточному шаблону. (Лексема – это последовательность символов, имеющих смысл. Она определяется либо как имя в соответствии с синтаксисом Турбо-Пролога, либо как строчное представление числа, при этом знак возвращается отдельно, либо как отдельный символ.)
frontstr(Lenght,Inpstring,StartString,RestString)
(integer,string,string,string) – (i,i,o,o)
Разделяет строку Inpstring на две части. StartString будет иметь длину Lenght первых символов исходной строки, RestString представляет собой остаток строки InpString.
concat(String1,String2,String3)
(string,string,string) – (i,i,o) (i,o,i) (o,i,i) (i,i,i)
Слияние строк , согласно поточному шаблону, по формуле: String3 = String1 + String2.
str_len(String,Length)
(string,integer) – (i,i) (i,o) (o,i)
Определяет длину Length строки String.
isname(StringParam)
(string) – (i)
Завершается успешно, если StringParam есть имя, удовлетворяющее синтаксису Пролога.
4.4. Преобразование типов
Стандартные предикаты данной группы служат для преобразования символов с десятичным кодом ASCII, строк с отдельным символом, строк с целыми и действительными числами, а также строчных букв латинского алфавита с соответствующими прописными буквами.
char_int(CharParam,IntgParam)
(char,integer) – (i,o) (o,i) (i,i)
Преобразует символ в код ASCII, согласно поточному шаблону.
str_int(StringParam,IntgParam)
(string,integer) – (i,o) (o,i) (i,i)
Строка, представляющая целое десятичное число, преобразуется в это число.
str_char(StringParam,CharParam)
(string,char) – (i,o) (o,i) (i,i)
Один знак как строка преобразуетс в символ.
str_real(StringParam,RealParam)
(string,real) – (i,o) (o,i) (i,i)
Строка, представляющая десятичное число, преобразуется в это число.
4.5. Работа с базой данных
consult(DosFileName)
(string) – (i)
Добавляет текстовый файл с именем DosFileName к текущей базе данных. Текстовый файл может быть, например, создан в результате выполнения предиката save. Этот файл содержит факты, которые должны быть описаны в разделе DbaseDom. Выполнение предиката не будет успешным, если в файле имеются синтаксические ошибки.
save(DosFileName)
(string) – (i)
Записывает динамическую базу данных на диск в текстовый файл с именем DosFileName. После этого файл можно снова загрузить в оперативную память, используя предикатconsult. Для хранения каждого факта используется отдельная строка. Текстовый файл, представляющий собой всю базу данных, можно просмотреть и изменить, используя редактор Пролога.
asserta( Term )
(DbaseDom) – (i)
Заносит факт Termв базу данных перед другими фактами. Факт должен быть термом, принадлежащим области определенияDbaseDom.
assertz( Term )
(DbaseDom) – (i)
Заносит факт Termв конец базы данных. Факт должен быть термом, принадлежащим области определенияDbaseDom.
retract( Term )
(DbaseDom) – (_)
Удаляет первый факт из базы данных, который соответствует заданному факту Term.
retractall(Term)
(InternalDatabaseDomain) – (_)
Очищает всю базу данных.