- •1. Основи мови програмування пролог
- •1.1. Основні поняття
- •1.2. Синтаксис мови пролог
- •1.3. Класифікація даних у пролозі
- •1.4. Приклад доказу в пролозі
- •1.5. Подання задачі у вигляді і-або дерева
- •1.6. Структура програми в системі tp
- •2. Підстави логічного програмування
- •1.7. Убудовані типи даних мови tp
- •1.8. Висновки
- •2.1. Принцип резолюцій
- •2.3. Способи застосування принципу резолюцій
- •2.4. Диз’юнкти хорhа
- •3. Три семантичні моделі пролог-програми
- •4. Подання знань
- •4.1. Процес подання знань
- •4.2. Способи подання бази знань
- •4.2.1. Представлення цілісних інформаційних елементів у вигляді фактів
- •4.2.2. Подання атрибутів у вигляді фактів
- •4.2.3. Представлення знань у вигляді списку структур
- •4.2.4. Подання у вигляді рекурсивних структур
- •4.2.5. Подання у вигляді двійкового дерева
- •4.2.6. Порівняння різних виглядів подання бази даних
- •4.2.7. Компонування даних у список
- •4.3. Використання складених об'єктів
- •4.4. Використання альтернативних доменів
- •4.5. Засоби документування програми
- •4.6. Типи й властивості відношень предметної області
- •4.6.1. Обмеження, що забезпечують цілсність відношень
- •4.6.2. Властивості відношень бази знань і їхня підтримка в програмі на tp симетрія і асиметрія
- •Рефлексивность і нерефлексивность
- •Транзитивність
- •Симетричність і транзитивність
- •Спроба 1
- •Спроба 2.
- •Запам'ятовування списку відвіданих місць
- •4.7. Списки
- •4.7.1. Подання й зображення списків
- •4.7.2. Використання списків
- •4.7.3. Метод поділу списку на голову і хвіст (псгх)
- •4.7.4. Списки списків
- •Методи програмування
- •5.1. Повторення і відкіт (пв)
- •5.2. Метод відкоту після невдачі (впн)
- •5.3. Метод відсікання та відкоту (вв)
- •5.4. Повторення та рекурсія (пр)
- •5.5. Метод узагальненого правила рекурсії (упр)
- •5.6. Побудова рекурсивних структур методом прогресуючої підстановки (пп)
- •5.7. Предикат відсікання
- •5.8. Організація багаторазово виконуваних інтерактивних програм (бвіп)
- •5.9. Метод аналізу станів (ас)
- •5.10. Метод організації висхідних рекурсивних обчислень (вро)
- •5.11. Комбінація спадних і висхідних рекурсивных обчислень (ксвро)
- •5.12. Предикат fail-if (not)
- •5.13. Предикат true
- •5.14. Модифікація бази даних (мбд)
- •5.15. Керування базою даних (кбд)
- •5.16. Глобальні змінні (гз)
- •5.17. Накопичування результатів у базі даних за допомогою вимушеного відкоту і глобальної змінної (нрввгз)
- •5.18. Метапрограмування (мп)
- •Список рекомендованої літератури
- •Програмування мовою пролог
5.18. Метапрограмування (мп)
Задача. Уявимо, що треба кодувати деякі повідомлення предикатом з двома параметрами: перший – список слів повідомлення, другий – список їх кодів. Цю процедуру можна подати у такому вигляді:
кодувати( [ ], [ ]).
кодувати( [Слово | Слова], [Код | Коди]):-
шифр(Слово, Код),
кодувати(Слова, Коди).
Процедура “шифр” повинна мати деякий шифруючий алгоритм, який має сенс змінювати. Можна кожний раз переписувати цю процедуру з новим алгоритмом. Але якщо система програмування підтримує предикат call, то цього можна уникнути.
Предикат call має один аргумент – структуру, яка викликається у якості цілі. Здібність узгодження, отримання відмови й повторного узгодження цілі у нього така ж як і у її аргумента. Використовуючи предикат call процедуру “кодувати” можна подати у такий спосіб:
кодувати( [ ], _, [ ]).
кодувати( [Слово | Слова], Ім’я_алгоритму, [Код | Коди]):-
ціль :- ..[Ім’я_алгоритму, Слово, Код],
call(Ціль),
шифр(Слово, Код),
кодувати(Слова, Ім’я_алгоритму, Коди).
Додатковий аргумент – ім’я кодуючого алгоритму. На кожному рівні рекурсії процедура будує цільовий терм із імені алгоритму як функтора, слова повідомлення та його кода. Цей терм викликається у якості цілі. Процедура “кодувати” відділена від кодуючих алгоритмів. Вона описує лише спосіб кодування – пословне кодування.
Програма, яка визначає, як повинні використовуватись інші програми, називається метапрограмою. Процедура “кодувати” – якраз така програма. Кодуючі алгоритми називаються об’єктними програмами. Декларуя ідентичність програм і даних, ПРОЛОГ забезпечує простоту метапрограмування.
ПРИМІТКА. Система TP не підтримує предикат call.
Список рекомендованої літератури
Братко И. Программирование на языке ПРОЛОГ для искусственного интеллекта. - М.: Мир, 1990. -560с.
Доорс Дж., Рейблейн А.Р., Вадерс С. ПРОЛОГ – язык программирования будущего: Пер. с англ. - М.: ФиС, 1990.- 144с.
Ин Ц., Соломон Д.. Использование ТУРБО ПРОЛОГА: Пер. с англ. - М.: Мир, 1993. - 606с.
Кларк К., Маккей Ф. Введение в логическое программирование на микро-ПРОЛОГЕ: Пер. с англ. - М.: Радио и связь, 1987.- 312с.
Клоксин У., Меллиш К. Программирование на языке ПРОЛОГ: Пер. с англ. - М.: Мир, 1987.- 336с.
Логический подход к искусственному интеллекту: от классической логики к логическому программированию: Пер. с фр. /А. Тейз, П. Грибомон, Ж. Луи и др. - М.: Мир, 1990. - 432 с.
Малпас Дж. Реляционный язык ПРОЛОГ и его применение: Пер. с англ. под. ред. В.Н.Соболева. - М.: Наука, 1990. -464с.
Стерлинг Л., Шапиро Э. Искусство программирования на языке ПРОЛОГ: Пер. с англ. - М.: Мир, 1990.- 235с.
Стобо Дж. Язык программирования ПРОЛОГ: Пер. с англ. - М.: Радио и связь, 1993 . –325с.
Язык ПРОЛОГ в пятом поколении ЭВМ.: Сб. ст. 1983-86 гг.: Пер. с англ. /Сост. H.И. Ильинский. - М.: Мир, 1988.- 501с.
Зміст
ВСТУП 3
1. ОСНОВИ МОВИ ПРОГРАМУВАННЯ ПРОЛОГ 5
1.1. ОСНОВНІ ПОНЯТТЯ 5
1.2. СИНТАКСИС МОВИ ПРОЛОГ 7
1.3. КЛАСИФІКАЦІЯ ДАНИХ У ПРОЛОЗІ 8
1.4. ПРИКЛАД ДОКАЗУ В ПРОЛОЗІ 10
1.5. ПОДАННЯ ЗАДАЧІ У ВИГЛЯДІ І-АБО ДЕРЕВА 12
1.6. СТРУКТУРА ПРОГРАМИ В СИСТЕМІ TP 13
1.7. УБУДОВАНІ ТИПИ ДАНИХ МОВИ TP 14
1.8. ВИСНОВКИ 14
2. ПІДСТАВИ ЛОГІЧНОГО ПРОГРАМУВАННЯ 15
2.1. ПРИНЦИП РЕЗОЛЮЦІЙ 16
2.3. СПОСОБИ ЗАСТОСУВАННЯ ПРИНЦИПУ РЕЗОЛЮЦІЙ 18
2.4. ДИЗ’ЮНКТИ ХОРHА 18
3. ТРИ СЕМАНТИЧНІ МОДЕЛІ ПРОЛОГ-ПРОГРАМИ 20
4. ПОДАННЯ ЗНАНЬ 23
4.1. ПРОЦЕС ПОДАННЯ ЗНАНЬ 23
4.2. СПОСОБИ ПОДАННЯ БАЗИ ЗНАНЬ 24
4.2.1. ПРЕДСТАВЛЕННЯ ЦІЛІСНИХ ІНФОРМАЦІЙНИХ ЕЛЕМЕНТІВ У ВИГЛЯДІ ФАКТІВ 25
4.2.2. ПОДАННЯ АТРИБУТІВ У ВИГЛЯДІ ФАКТІВ 25
4.2.3. ПРЕДСТАВЛЕННЯ ЗНАНЬ У ВИГЛЯДІ СПИСКУ СТРУКТУР 26
4.2.4. ПОДАННЯ У ВИГЛЯДІ РЕКУРСИВНИХ СТРУКТУР 27
4.2.5. ПОДАННЯ У ВИГЛЯДІ ДВІЙКОВОГО ДЕРЕВА 27
4.2.6. ПОРІВНЯННЯ РІЗНИХ ВИГЛЯДІВ ПОДАННЯ БАЗИ ДАНИХ 29
4.2.7. КОМПОНУВАННЯ ДАНИХ У СПИСОК 29
4.3. ВИКОРИСТАННЯ СКЛАДЕНИХ ОБ'ЄКТІВ 30
4.4. ВИКОРИСТАННЯ АЛЬТЕРНАТИВНИХ ДОМЕНІВ 31
4.5. ЗАСОБИ ДОКУМЕНТУВАННЯ ПРОГРАМИ 34
4.6. ТИПИ Й ВЛАСТИВОСТІ ВІДНОШЕНЬ ПРЕДМЕТНОЇ ОБЛАСТІ 35
4.6.1. ОБМЕЖЕННЯ, ЩО ЗАБЕЗПЕЧУЮТЬ ЦІЛСНІСТЬ ВІДНОШЕНЬ 35
4.6.2. ВЛАСТИВОСТІ ВІДНОШЕНЬ БАЗИ ЗНАНЬ І ЇХНЯ ПІДТРИМКА В ПРОГРАМІ НА TP 36
СИМЕТРІЯ І АСИМЕТРІЯ 36
РЕФЛЕКСИВНОСТЬ І НЕРЕФЛЕКСИВНОСТЬ 37
ТРАНЗИТИВНІСТЬ 38
СИМЕТРИЧНІСТЬ І ТРАНЗИТИВНІСТЬ 39
СПРОБА 1 39
СПРОБА 2. 40
ЗАПАМ'ЯТОВУВАННЯ СПИСКУ ВІДВІДАНИХ МІСЦЬ 42
4.7. СПИСКИ 43
4.7.1. ПОДАННЯ Й ЗОБРАЖЕННЯ СПИСКІВ 43
4.7.2. ВИКОРИСТАННЯ СПИСКІВ 44
4.7.3. МЕТОД ПОДІЛУ СПИСКУ НА ГОЛОВУ І ХВІСТ (ПСГХ) 46
4.7.4. СПИСКИ СПИСКІВ 47
МЕТОДИ ПРОГРАМУВАННЯ 48
5.1. ПОВТОРЕННЯ І ВІДКІТ (ПВ) 49
5.2. МЕТОД ВІДКОТУ ПІСЛЯ НЕВДАЧІ (ВПН) 51
5.3. МЕТОД ВІДСІКАННЯ ТА ВІДКОТУ (ВВ) 53
5.4. ПОВТОРЕННЯ ТА РЕКУРСІЯ (ПР) 55
5.5. МЕТОД УЗАГАЛЬНЕНОГО ПРАВИЛА РЕКУРСІЇ (УПР) 56
5.6. ПОБУДОВА РЕКУРСИВНИХ СТРУКТУР МЕТОДОМ ПРОГРЕСУЮЧОЇ ПІДСТАНОВКИ (ПП) 58
5.7. ПРЕДИКАТ ВІДСІКАННЯ 60
5.8. ОРГАНІЗАЦІЯ БАГАТОРАЗОВО ВИКОНУВАНИХ ІНТЕРАКТИВНИХ ПРОГРАМ (БВІП) 65
5.9. МЕТОД АНАЛІЗУ СТАНІВ (АС) 68
5.10. МЕТОД ОРГАНІЗАЦІЇ ВИСХІДНИХ РЕКУРСИВНИХ ОБЧИСЛЕНЬ (ВРО) 76
5.11. КОМБІНАЦІЯ СПАДНИХ І ВИСХІДНИХ РЕКУРСИВНЫХ ОБЧИСЛЕНЬ (КСВРО) 79
5.12. ПРЕДИКАТ FAIL-IF (NOT) 82
5.13. ПРЕДИКАТ TRUE 83
5.14. МОДИФІКАЦІЯ БАЗИ ДАНИХ (МБД) 84
5.15. КЕРУВАННЯ БАЗОЮ ДАНИХ (КБД) 85
5.16. ГЛОБАЛЬНІ ЗМІННІ (ГЗ) 85
5.17. НАКОПИЧУВАННЯ РЕЗУЛЬТАТІВ У БАЗІ ДАНИХ ЗА ДОПОМОГОЮ ВИМУШЕНОГО ВІДКОТУ І ГЛОБАЛЬНОЇ ЗМІННОЇ (НРВВГЗ) 86
5.18. МЕТАПРОГРАМУВАННЯ (МП) 88
Темплан 2004, поз. 46
Навчальне видання
Віктор Миколайович Єфімов
