- •1. Вступ в логічне програмування
- •1.1. Виникнення логічного програмування
- •1.2. Сучасний стан логічного програмування
- •Опис задачі на пролозі. Факти і правила
- •2.1. Опис задачі на пролозі
- •2.2. Факти
- •Цільове твердження
- •Умовні твердження
- •Приклад програми на пролозі
- •2.6. Виконання програми на пролозі
- •2.7. Статична та динамічна бази даних
- •2.8. Підготовка фактів для внутрішньої бази даних
- •2.9. Опис фактів внутрішньої бази даних
- •2.10. Предикати роботи з внутрішньою базою даних
- •2.11. Приклади використання внутрішньої бази даних
- •3. Основні поняття visual-prolog
- •3.1. Загальні відомості
- •3.3. Домени елементарних об’єктів
- •3.4. Терми
- •3.4.1. Константа
- •Анонімна змінна
- •3.4.3. Структури
- •3.5. Програма на пролозі
- •4. Механізми прологу
- •Механізм узгодження цілі з базою даних
- •4.2. Механізм звороту
- •4.3. Механізм звороту і відсік
- •4.4. Рекурсія
- •4.4.1. Рекурсивний метод розв’язку задач
- •Рекурсивні методи 2-х доменів:
- •Застосуємо висхідний метод рекурсії до розв’язку задачі:
- •Висхідна рекурсія
- •4.4.4. Предикат repeат
- •Міркування про те, як треба писати програму
- •5. Обробка рядків
- •5.1. Загальні відомості
- •1.1 Стандартні предикати обробки рядків
- •5.3. Лексиграфічне порівняння рядків
- •2Низхідна рекурсія
- •6.1. Метод низхідної рекурсії
- •6.2. Загальна характеристика рекурсивних методів
- •6.3. Низхідна та висхідна рекурсії
- •7. Робота зі списками
- •7.1. Списки. Оголошення списків
- •7.2. Увід-вивід списків
- •7.3. Основна операція на списках
- •7.4. Формування списків стандартним предикатом
- •Процедура з’єднує два списки.
- •Процедура розділяє список на два за вказаним елементом.
- •2.1 Сортування списків на пролозі
- •Сортування методом пухирця
- •7.8. Складені списки
- •8. Предикати вводу-вивіду
- •8.1. Предикати вводу
- •8.2. Предикати виводу
- •9. Файли
- •9.1. Символічне ім’я файлу
- •9.2. Вхідний і вихідний потоки
- •9.3. Організація файлу та методи доступу до файлу
- •9.4. Робота з файлами різними методами доступу
- •9.5. Закриття файлу
- •9.6. Предикати роботи з каталогами
- •9.7. Предикати, що працюють з атрибутами файлів
- •Література
3.3. Домени елементарних об’єктів
Стандартні домени використовують для об’яви типів аргументів предикату користувача.
Прості стандартні типи відомі Прологу, їх не описують. В таблиці №1 подано прості стандартні домени, їх діапазон і приклади констант цих доменів.
Домен |
Визначення елементів домену |
Діапазон |
Приклад константи |
Real |
Дійсне число |
1e-307 ≤ X ≤ 1e-308 |
2.4 або 0.3e+2=30 |
Char |
Символ ASCII |
1 байт |
‘a’ або ‘\97’ |
Symbol |
Символічна константа. Записується за правилами ідентифікатору. Починається з малої букви |
1-250символів |
Prolog |
String |
Рядки Рядки можуть подаватися як символи. Для цього в опціях компілятору обирають Place Strings in Sym File |
Довжина рядку <= 64 Кб |
"Пролог" або “\48\49\50” |
File |
Символічне ім’я файлу |
1-250 |
f1 записується за правилом ідентифікатору |
Binary |
Бінарна константа Подається списком цілих значень перед котрим стоїть ознака $. Кожне ціле число переводиться в бінарний вигляд. Результат розміщується групою бінарних байтів |
Ціле значення <= 255. |
$[‘s’, 240,0xA1] 0x - шістнадцятирічний запис 0o – восьмирічний запис |
Short |
Коротке ціле зі знаком |
Для всіх платформ 16 біт 32768 ≤ N ≤ 32767
|
-30940 |
Ushort |
Коротке ціле без знаку |
Для всіх платформ 16 біт 0-65535 |
39 434 |
Long |
Довге ціле зі знаком |
Для всіх платформ 32 біта: -2 147 483 648 до 2 147 483 647 |
+300 000 000 |
Ulong |
Довге ціле без знаку |
Для всіх платформ 32 біта 0 - 4 294 967 295 |
3 234 556 765 |
Integer |
Знакове ціле.
|
Діапазон залежить від платформи. Для платформи 16 біт: 32768 ≤ N ≤ 32767 Для платформи 32 біта: -2 147 483 648 до 2 147 483 647 |
+1 256 543 000 -355667 |
Unsigned |
Ціле без знаку |
Діапазон залежить від платформи. Для платформи 16 біт: 0-65535 Для платформи 32 біта 0 - 4 294 967 295 |
64 000 000 |
Byte |
Бінарний запис |
Для всіх платформ 8 біт 0-255 |
А = 065 |
Word |
Бінарний запис |
Для всіх платформ 16 біт 0-65535 |
65065 |
Dword |
Бінарний запис |
Для всіх платформ 32 біт 0 - 4 294 967 295 |
065 065 065 |
Предикатне значення |
Ім’я предикату, що належить предикатному домену |
|
pas |
Об’єктне предикатне значення |
Ім’я предикату, який об’явлено у класі, що належить об’єктному предикатному домену. |
|
Book |
ТАБЛИЦЯ №1
Програміст може ввести свої типи для аргументів предикату, які визначаються через стандартні домени або інші типи користувача.
Стандартні типи і типи користувача можуть бути простими і складеними(структурами). Тип даного вказує на структуру даного та можливі значення даного цього типу, які обираються з вказаного домену.
Прості типи користувача тотожні простим стандартним типам. Тобто дані простих доменів користувача мають ту ж структуру і діапазон значень, що прості стандартні типи, але ідентифікатори типу придумує користувач за мнемонікою. Типи користувача звужують область застосування даних відносно базового стандартного типу.
Прості типи користувача описують в секції Domains:
Domains
fath = string
son = string
Predicates
father (fath, son)
Структура – складний тип даних.
Структури описують в секції Domains. Розглянемо приклад опису списку з символів.
Domains
List=char*
Структури користувача визначаються за допомогою функтору. Функтор указує на ознаку, за якою збираються об'єкти в структуру.
Наприклад: структура, що задає адресу людини визначається:
Domains
Ad = adress (string, string, integer)
(місто, вулиця, будинок)