Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AlgStr / Библиотека / ЛЕКЦИИ / POSIBNIK / ПРОГР НА ПРОЛОГЕ.doc
Скачиваний:
42
Добавлен:
23.03.2015
Размер:
669.7 Кб
Скачать

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