
- •Глава 1. Введение в пролог
- •1. Декларативные и процедурные языки программирования
- •2. Пролог и логика предикатов. Внешние цели
- •3. Управление программой. Подцели. Механизм сопоставления
- •4. Внутренние подпрограммы унификации
- •Глава 2. Внутренние цели. Механизм возврата
- •1. Структура пролог-программы
- •2. Использование внутренних целей
- •3. Встроенный предикат fail
- •4. Сокращенные варианты внутренних запросов
- •5. Использование в запросах анонимных переменных
- •6. Механизм возврата
- •Глава 3. Типы данных и арифметика Turbo Prolog
- •1. Стандартные типы данных
- •2. Структуры, простые и составные
- •3. Структурные диаграммы
- •4. Использование в запросах анонимных переменных
- •5. Использование альтернативных доменов
- •6. Арифметика в Turbo Prolog
- •Глава 4. Предикат отсечения (!). Программирование альтернатив. Правила повтора
- •1. Повторения и возвраты
- •2. Отсечение (!)
- •3. Программирование альтернатив
- •4. Правило повтора
- •Глава 5. Методы организации рекурсии
- •1. Простая рекурсия
- •2. Метод обобщенного правила рекурсии
- •3. Граничное условие рекурсии. Нисходящая и восходящая рекурсии
- •4. Программа о подсчете числа точек
- •Глава 6. Списки
- •1. Основные понятия
- •2. Списки и турбо-пролог
- •3. Атрибуты списка
- •4. Внутреннее представление списков
- •5. Применение списков в программе
- •6. Метод разделения списка на голову и хвост
- •7. Поиск элемента в списке
- •8. Присоединение списка
- •9. Добавление и удаление элемента
- •10. Подсписок
- •11. Перестановки списка
- •Глава 7. Сортировка списков
- •1. Разделение списка на два
- •2. Сортировка списков методом вставки
- •3. Быстрая сортировка
- •4. Быстрая сортировка_1
- •5. Компоновка данных в список
- •Глава 8. Программирование алгоритмов с возвратом. Представление графов в turbo prolog
- •1. Задача о весах
- •2. Представление графов в turbo prolog
- •3. Поиск пути на неориентированном графе
- •4. Поиск гамильтоновых циклов
- •5. Поиск пути минимальной стоимости
- •Глава 9. Динамическая база данных
- •1. Турбо-пролог и реляционные базы данных
- •2. Описание предикатов динамических бд
- •3. Встроенные предикаты asserta, assertz, retract, retractall, save, consult
- •4. Создание динамической базы данных
- •5. Обсуждение проекта базы данных
- •6. Создание базы данных
- •7. Написание программных модулей
- •Глава 10. Глобальные переменные в turbo prolog
- •1. Модификация базы данных
- •2. Накопление результатов с помощью вынуждаемого возврата
- •3. Подсчет членов парторганизации
- •4. Поиск пути минимальной стоимости от a до z
- •Библиографический список
- •Оглавление
Глава 3. Типы данных и арифметика Turbo Prolog
1. Стандартные типы данных
Турбо-Пролог требует указания типов для всех аргументов (объектов) каждого предиката программы. В разделе predicates НУЖНО ОПИСАТЬ ТИП ОБЪЕКТОВ ДЛЯ КАЖДОГО ПРЕДИКАТА.
Турбо-Пролог позволяет конструировать свои собственные типы объектов из базисных типов доменов. Рассмотрим вначале базисные типы доменов.
Турбо-Пролог имеет 6 встроенных типов доменов: СИМВОЛЫ, ЦЕЛЫЕ ЧИСЛА, ДЕЙСТВИТЕЛЬНЫЕ ЧИСЛА, СТРОКИ, СИМВОЛИЧЕСКИЕ ИМЕНА И ФАЙЛЫ. Тип каждого из доменов должен быть объявлен в разделе программы domains.
В таблице 3.1 приведены все 6 стандартных типов доменов Турбо-Пролога.
Таблица 3.1.
Тип данных |
Ключевое слово |
Диапазон значений |
Примеры использования |
Символы |
сhar |
Все возможные символы |
'b', '#', '%', 'B', '\13' |
Целые числа |
integer |
От —32768 до 32767 |
-84,2349 |
Действи-тельные числа |
real |
от +1Е-307 до +1Е308 |
-42769, 093, 1.25Е23, 5.15Е-9 |
Строки |
string |
Последовательность символов (не более 250) |
«PROLOG», «123», «Мзри» |
Символи-ческие имена |
symbol |
1. Последовательность букв, цифр и подчерков; первый символ — строчная буква 2. Последовательность любых символов, заключенная в кавычки |
mary, answer_2; «Агата Кристи», «3.1412» |
Файлы |
file |
Допустимое в DOS имя файла |
BIRDS.DBA, mail.txt |
Операторы ввода:
readchar(X) readint(X) readreal(X) readln(X), где X — переменная соответствующего типа; в операторе readln(X) X может быть string или symbol.
Кроме того, оператор readterm(my_domain,X) позволяет ввести переменную уже описанного в разделе domains типа my_domain.
2. Структуры, простые и составные
Объекты утверждений представляют собой данные, тип же простых объектов ограничен 6 базисными типами. Рассмотрим такой пример утверждения:
collection(smith,"Использование Турбо-Пролога", "Ц.Ин, Д.Соломон", "Мир", "1993").
Его объекты принадлежат к базисным типам доменов:
predicates
collection(symbol,symbol,symbol,symbol,integer)
Первый объект smith имеет простую структуру: он представляет сам себя. То же можно сказать и про остальные объекты.
Любой объект, представляющий сам себя, называется простым объектом.
Аналогично, СТРУКТУРА, СОСТОЯЩАЯ ИЗ ПРОСТЫХ ОБЪЕКТОВ, НАЗЫВАЕТСЯ ПРОСТОЙ СТРУКТУРОЙ.
Можно было бы не пользоваться в описании предиката collection базисными типами, а описать свои:
domains
name,title,author,publisher = symbol
year = integer
predicates
collection(name,title,author,publisher,year)
В этом описании 4 последних объекта обозначают атрибуты книги. Правило, которое оперирует с персональными библиотеками, рассматривает эти 4 последних объекта как независимые сущности. Чтобы сделать код программы более простым, а запись предиката collection более компактной, соберем эти объекты в структуру с названием book:
collection(smith, book("Alice in Wonderland", "Lewis Carroll", "The New American library", 1960)).
В данном примере book является составным объектом. Терм book в этом утверждении называется функтором. Функтор составного объекта есть на самом деле предикат, хотя он и вставлен внутрь другого предиката. главным функтором здесь является предикат collection.
Объект, представляющий другой объект или совокупность объектов, называется составным объектом.
Записанные же таким образом предикаты collection называются составными структурами, поскольку они скомпонованы из составных объектов.
Турбо-Пролог позволяет объявлять составные объекты (доменные структуры) в разделе domains. Функтор структуры personal_library имеет имя book. Описание таково:
domains
personal_library = book(title, author,
publisher, year)
name,title,author,publisher = symbol
year = integer
Предикат, использующий эту структуру, определяется так:
predicates
collection(name, personal_library)
Описание содержит два имени объектов. Первое имя относится к обычному объекту, второе — к структуре из нескольких объектов.
Структура обеспечивает средство сортировки объектов по категориям. ССЫЛКИ НА ДОМЕННУЮ СТРУКТУРУ ОСУЩЕСТВЛЯЮТСЯ ПО ИМЕНИ ФУНКТОРА (в нашем примере — по имени book).