- •Міністерство освіти і науки України Дніпропетровський національний університет
- •Програмування мовою пролог
- •Дніпропетровськ
- •1. Основи мови програмування пролог
- •1.1. Основні поняття
- •1.2. Синтаксис мови пролог
- •1.3. Класифікація даних у пролозі
- •1.4. Приклад доказу в пролозі
- •1.5. Подання задачі у вигляді і-або дерева
- •1.6. Структура програми в системі tp
- •1.7. Убудовані типи даних мови tp
- •1.8. Висновки
- •2. Підстави логічного програмування
- •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. Метапрограмування (мп)
- •Список рекомендованої літератури
- •1. Основи мови програмування пролог 4
- •2. Підстави логічного програмування 14
- •3. Три семантичні моделі пролог-програми 20
- •4. Подання знань 23
- •Програмування мовою пролог
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. Основи мови програмування пролог 4
1.1. ОСНОВНІ ПОНЯТТЯ 5
1.2. СИНТАКСИС МОВИ ПРОЛОГ 7
1.3. КЛАСИФІКАЦІЯ ДАНИХ У ПРОЛОЗІ 8
1.4. ПРИКЛАД ДОКАЗУ В ПРОЛОЗІ 9
1.5. ПОДАННЯ ЗАДАЧІ У ВИГЛЯДІ І-АБО ДЕРЕВА 12
1.6. СТРУКТУРА ПРОГРАМИ В СИСТЕМІ TP 13
1.7. УБУДОВАНІ ТИПИ ДАНИХ МОВИ TP 13
1.8. ВИСНОВКИ 14