![](/user_photo/2706_HbeT2.jpg)
- •Якимов с.П. Логическое программирование.
- •Красноярск
- •03.04.06 Г., протокол № 9
- •Содержание
- •Введение
- •1 Введение в логическое программирование
- •2 Основные конструкции логического программирования
- •3 Структура программы на языке Пролог
- •4 Вычислительная модель логических программ
- •5 Управление выполнением программы на языке Пролог
- •5.2Caf– метод (CutAndFail– отсечение и отказ)
- •6 Рекурсивные структуры данных
- •7 Программирование баз данных
- •7.1 Управление встроенной базой данных
- •7.2 Управление внешней базой данных
- •8.1 Основные конструкции логического программирования. Факты и правила(2 часа)
- •Контрольные вопросы
- •8.2 Вычислительная модель логических программ. Логические схемы(4 часа)
- •Контрольные вопросы
- •8.3 Управление выполнением программы на языке Пролог. Оконный интерфейс (4 часа)
- •Контрольные вопросы
- •8.4 Рекурсивные структуры данных. Списки (4 часа)
- •Контрольные вопросы
- •8.5 Программирование баз данных. Базы данных (4 часа)
- •Контрольные вопросы
- •Библиографический список
- •Приложение а Ключевые слова
Контрольные вопросы
В чем отличие языка Пролог от традиционных алгоритмических языков программирования?
Назовите основные конструкции логического программирования.
Что такое факт в логическом программировании?
Что такое правило в логическом программировании?
8.3 Управление выполнением программы на языке Пролог. Оконный интерфейс (4 часа)
Цель
Требуется написать программу и реализовать ее на одной из версий языка Пролог
Задачи
Сформулировать постановку задачи.
Написать текст программы.
Сделать подробное описание назначения и использования всех правил, определенных в программе.
Составить несколько контрольных примеров, исчерпывающе отражающих правильность работы программы.
Составить и оформить протоколы работы программы по каждому контрольному примеру.
Ход работы
Реализовать один из вариантов меню, показанных на рисунке. Для управления курсором использовать клавиши: «»– курсор на одну позицию вверх, «»– вниз, «»– влево, «»– вправо, «Enter»– выход из меню с выбором текущей позиции курсора, «Esc»– выход из меню без выбора. Для выбора варианта меню в качестве ключа используйте первую букву своей фамилии:
-
а, б, в,
Царь
к, л, м
г, д, е,
Царевич
н, о, п,
Царь
Королевич
ж, з, и,
Король
р, с, т
Царевич
Сапожник
й)
Королевич
у)
Король
Портной
Сапожник
Портной
-
ф, х, ц, ч, ш, щ, э, ю, я)
Царь
Царевич
Король
Королевич
Сапожник
Портной
Контрольные вопросы
Назовите правила сопоставления переменных.
Что такое механизм отката?
В чем состоит алгоритм унификации?
Что такое отсечение?
8.4 Рекурсивные структуры данных. Списки (4 часа)
Цель
Требуется написать программу и реализовать ее на одной из версий языка Пролог
Задачи
Сформулировать постановку задачи.
Написать текст программы.
Сделать подробное описание назначения и использования всех правил, определенных в программе.
Составить несколько контрольных примеров, исчерпывающе отражающих правильность работы программы.
Составить и оформить протоколы работы программы по каждому контрольному примеру.
Ход работы
Из предлагаемого ниже списка, используя свою фамилию, имя и отчество в качестве ключа, выберете задания и определите соответствующие правила обработки списков:
сложение двух списков:
а) concat_lists_1([a, b, c, d], [a, b, l, m, k], [a, b, c, d, a, b, l, m, k]).
б) concat_lists_2([a, b, c, d], [a, b, l, m, k], [a, b, c, d, l, m, k]).
в) concat_lists_3([a, b, c, d], [a, b, l, m, k], [a, a, b, b, c, l, d, m, k]).
г) concat_lists_4([a, b, c, d], [a, b, l, m, k], [a, a, b, b, c, l, d, m]).
по парное сложение элементов списков
д) add_lists([4, 7, 12, 10, 5], [3, 6, 8, 3], [7, 13, 20, 13, 5]).
е) add_lists([4, 7, 12, 10, 5], [3, 6, 8, 3], [7, 13, 20, 13]).
замена списка на обратный
ж) revers_list([1, 4, 9, 0, 5], [5, 0, 9, 4, 1]).
сортировка элементов списка
з) sorting_1([5, 3, 8, 4, 1], [1, 3, 4, 5, 8]).
и) sorting_2([5, 3, 8, 4, 1], [1, 3, 4, 5, 8]).
подсчет количества элементов списка
й) quant_1([a, b, y, b, k, d], 6).
подсчет количества различных значений элементов списка
к) quant_2([a, b, y, b, k, y, d], 5).
подсчет количества уникальных элементов списка
л) quant_3([a, b, y, b, k, y, d], 3).
подсчет количества неуникальных элементов списка
м) quant_4([a, b, y, b, k, y, d], 2).
проверка вхождения элемента в список с определением позиции вхождения
н) member_1(c, [a, b, c, d, f, c], 3).
о) member_3(c, [a, b, c, d, f, c], 6).
п) member_1(c, [a, b, c, d, f, c], [3, 6]).
удаление указанного элемента из списка
р) delete_element_1(c, [a, b, c, d, f, c], [a, b, d, f, c]).
с) delete_element_2(c, [a, b, c, d, f, c], [a, b, d, f,]).
т) delete_element_3(c, [a, b, c, d, f, c], [a, b, c, d, f]).
удаление элемента из списка по номеру
у) erase_element_1(2, [a, b, c, d, f, c], [a, c, d, f, c]).
ф) erase_element_2(2, [a, b, c, d, f, c], [a, b, c, d, c]).
удаление неуникальных элементов списка
х) erase_element_3([a, b, c, d, f, c, b], [a, c, d, f]).
замена указанного элемента на другой
ц) change_element(c, f, [a, b, c, d, f, c], [a, b, f, d, f, c]).
ч) change_element(c, f, [a, b, c, d, f, c], [a, b, c, d, f, f]).
ш) change_element(c, f, [a, b, c, d, f, c], [a, b, f, d, f, f]).
щ) change_element(c, f, [a, b, c, d, f, c], [a, b, f, d, c, f]).
ы) change_element(c, f, [a, b, c, d, f, c], [a, b, f, d, f, c]).
добавление элемента к списку
э) add_element_1(a, [e, a, b, c, a, d], [a, e, a, b, c, a, d]).
ю) add_element_2(a, [e, a, b, c, a, d], [e, a, b, c, a, d, a]).
нахождение совпадающих элементов в двух списках
я) compare_list([a, b, c, d, e, k], [a, c, b, d, k, k], [a, d, k]).