
- •Введение
- •Требования к выполнению лабораторных работ
- •Примеры с комментариями
- •Вычисление факториала
- •Ханойские башни
- •Задача с ферзями
- •Раздел 1. Основы программирования на языке Пролог Постановка задачи
- •Требования к исполнению
- •Методические указания
- •Задание 2. Пролог для задач искусственного интеллекта Постановка задачи
- •Требования к исполнению
- •Варианты задания
- •1. Система, отвечающая на вопросы о родственных отношениях
- •Программа синтаксического анализа предложений естественного языка
- •Экспертная система классификации объектов (диагностического типа )
- •4. Программа, составляющая головоломку крисс-кросс (перекрестный кроссворд)
- •Программа построения прямоугольного лабиринта
- •Игровая программа
- •Программа генерации геометрических головоломок
- •Программа разработки маршрутов транспортных перевозок
- •Программа составления учебного расписания
- •Методические указания
- •Введение…………………………………………………….……..... 3 Требования к выполнению лабораторных работ……….……...…. 3
Санкт-Петербургский Государственный Электротехнический Университет им. Ульянова (Ленина) ЛЭТИ
Кафедра МОЭВМ
Беляев С.
Практикум
на языке программирования Пролог
(Методическое пособие)
Санкт-Петербург
2002
УДК XXX.XX
В данном методическом пособии дается описание заданий практикума на языке программирования Пролог для студентов 3 курса факультета КТИ, кафедры МОЭВМ СПбГЭУ (ЛЭТИ). Задания разработаны в поддержку курса «Логическое и функциональное программирование». Приводятся подробные методические пояснения и рекомендации.
Рецензенты:
X
X
Беляев С. «Практикум на языке программирования Пролог (Методическое пособие )» СПБ., …(лицензия ЛР №… от …), 2002.28 с.
Печатается по решению Редакционно-издательского Совета факультета компьютерной техники и информационных технологий государственного электротехнического университета им. Ульянова (Ленина) ЛЭТИ.
ISBN X-XXXXX-XXX-X Издательский отдел
факультета компьютерной техники и
информационных технологий СПбГЭТУ
им. Ульянова (Ленина) ЛЭТИ, 2002
Введение
Целью выполнения данных лабораторных работ является приобретение и усвоение студентами навыков работы с языком Пролог (формальная постановка задачи, преобразование в форму, пригодную для программирования на Прологе, трассировка и оценка результатов) а также закрепление теоретических знаний, полученных при прослушивании курса лекций «Логическое и функциональное программирование».
Требования к выполнению лабораторных работ
В качестве результата выполнения лабораторных работ студентом считаются следующие документы:
Отчет о проделанной работе.
Текст рабочей программы на языке Пролог со всеми необходимыми модулями и настройками (зависит от среды исполнения), реализующей поставленную перед студентом задачу.
Входные/Выходные данные (при необходимости)
Трассировка программы (разворачивание стека Прологом)
Журналы сообщений об ошибках и т.п.
Отчет должен содержать следующую информацию:
Постановка задачи (исходная и формальная).
Необходимые структуры данных и алгоритмы (при не тривиальности последних необходимо представить блок-схемы).
Текст программы на языке Пролог (с необходимыми комментариями)
Трассировка – т.е. моделирование работы Пролог процессора на критичных модулях разработанной программы (в случае простоты программы производиться полная трассировка кода). Способ реализации данного пункта оставляется на усмотрение студента (диаграммы, история изменения стека, система возвратов и т.п.). Существуют программные среды позволяющие делать трассировку автоматически.
Результаты тестирования (наборы входных, выходных данных покрывающие всю функциональную часть).
Примеры с комментариями
Вычисление факториала
factorial(0,1).
factorial(N,F) :-
N>0,
N1 is N-1,
factorial(N1,F1),
F is N * F1.
Программа состоит из двух предложений. Первое утверждает, что факториал 0 равен 1. Второе говорит что «факториал N равен F, если N>1, и N1 это N-1, и факториал N1 это F1, и F это N*F1».
Вот как теперь можно посчитать факториал числа 3:
?- factorial (3,W).
W=6
Вот как выглядит соответствующее дерево вывода:
Ханойские башни
Цель этой известной головоломки – переместить N дисков с левого на правый штырь, используя средний штырь в качестве вспомогательного. При этом нельзя класть больший диск поверх меньшего диска. Вот начальная позиция для N=3:
Вот рекурсивная программа на прологе, которая решает эту задачу. Она состоит из двух правил:
move(1,X,Y,_) :-
write('Move top disk from '),
write(X),
write(' to '),
write(Y),
nl.
move(N,X,Y,Z) :-
N>1,
M is N-1,
move(M,X,Z,Y),
move(1,X,Y,_),
move(M,Z,Y,X).
Вот как выглядит решение задачи для N-3:
?- move(3,left,right,center).
Move top disk from left to right
Move top disk from left to center
Move top disk from right to center
Move top disk from left to right
Move top disk from center to left
Move top disk from center to right
Move top disk from left to right
Yes
Первое правило описывает перемещение одного диска. Второе указывает, как получить решение, используя рекурсию. Вот как будет выполняться цель ?-move (3,left,right,center):
Выполнить ?-move (2,left,center,right), затем
Выполнить ?-move (1,left,right,center), затем
Выполнить ?-move (2,center,right,left).