Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
prolog_методичка.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
224.77 Кб
Скачать

Санкт-Петербургский Государственный Электротехнический Университет им. Ульянова (Ленина) ЛЭТИ

Кафедра МОЭВМ

Беляев С.

Практикум

на языке программирования Пролог

(Методическое пособие)

Санкт-Петербург

2002

УДК XXX.XX

В данном методическом пособии дается описание заданий практикума на языке программирования Пролог для студентов 3 курса факультета КТИ, кафедры МОЭВМ СПбГЭУ (ЛЭТИ). Задания разработаны в поддержку курса «Логическое и функциональное программирование». Приводятся подробные методические пояснения и рекомендации.

Рецензенты:

X

X

Беляев С. «Практикум на языке программирования Пролог (Методическое пособие )»  СПБ., …(лицензия ЛР №… от …), 2002.28 с.

Печатается по решению Редакционно-издательского Совета факультета компьютерной техники и информационных технологий государственного электротехнического университета им. Ульянова (Ленина) ЛЭТИ.

ISBN X-XXXXX-XXX-X  Издательский отдел

факультета компьютерной техники и

информационных технологий СПбГЭТУ

им. Ульянова (Ленина) ЛЭТИ, 2002

Введение

Целью выполнения данных лабораторных работ является приобретение и усвоение студентами навыков работы с языком Пролог (формальная постановка задачи, преобразование в форму, пригодную для программирования на Прологе, трассировка и оценка результатов) а также закрепление теоретических знаний, полученных при прослушивании курса лекций «Логическое и функциональное программирование».

Требования к выполнению лабораторных работ

В качестве результата выполнения лабораторных работ студентом считаются следующие документы:

  • Отчет о проделанной работе.

  • Текст рабочей программы на языке Пролог со всеми необходимыми модулями и настройками (зависит от среды исполнения), реализующей поставленную перед студентом задачу.

  • Входные/Выходные данные (при необходимости)

  • Трассировка программы (разворачивание стека Прологом)

  • Журналы сообщений об ошибках и т.п.

Отчет должен содержать следующую информацию:

  1. Постановка задачи (исходная и формальная).

  2. Необходимые структуры данных и алгоритмы (при не тривиальности последних необходимо представить блок-схемы).

  3. Текст программы на языке Пролог (с необходимыми комментариями)

  4. Трассировка – т.е. моделирование работы Пролог процессора на критичных модулях разработанной программы (в случае простоты программы производиться полная трассировка кода). Способ реализации данного пункта оставляется на усмотрение студента (диаграммы, история изменения стека, система возвратов и т.п.). Существуют программные среды позволяющие делать трассировку автоматически.

  5. Результаты тестирования (наборы входных, выходных данных покрывающие всю функциональную часть).

Примеры с комментариями

  1. Вычисление факториала

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

Вот как выглядит соответствующее дерево вывода:

  1. Ханойские башни

Цель этой известной головоломки ­­– переместить 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).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]