
docs / PROLAB3
.DOCМОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ ЭЛЕКТРОННОЙ ТЕХНИКИ
Кафедра Проектирования И Конструирования Интегральных МикроСхем
Курс: Экспертные системы в САПР СБИС
Лабораторная работа N 3
Изучение методов повторения и рекурсии в Турбо-прологе
Подготовил: Авдеев Е.В.
Москва, 2000 г.
Введение. Некоторые средства и методы Турбо-пролога.
Предикат fail вызывает откат.
Предикат отсечения ! прерывает откат.
Встроенный предикат для считывания целых чисел с клавиатуры в переменную Num:
readin(Num)
Встроенный предикат для считывания десятичных чисел с клавиатуры в переменную Val:
readreal(Val)
Встроенный предикат для считывания символа с клавиатуры в переменную Char:
readchar(Char)
Встроенный предикат выдачи на экран строки и/или строковой переменной Name:
write(" <строка> ", Name)
Правило для сложения двух десятичных чисел:
sum(X,Y,Z) :- Z=X+Y.
Правила, выполняющие повторения, используют откат, а правила, выполняющие рекурсию, используют самовызов.
Вид правила, выполняющего повторение:
repetitive_rule :- /* правило повторения */
< предикаты и правила >,
fail. /* неудача */
Вид правила повтора, определяемого пользователем:
repeat. /* повторить */
repeat :- repeat.
Вид правила, выполняющего рекурсию:
recursive_rule :- /* правило рекурсии */
< предикаты и правила >,
recursive_rule.
Пример правила рекурсии с условием выхода - циклически считывается введенный символ и если он не совпадает с некоторым заданным символом, например, {, то выдается на экран, а при вводе этого символа { рекурсия прерывается:
read_char :-
readchar(Char_data),
Char_data <> '{',
write(Char_data),
read_char.
Обобщенное правило рекурсии:
<имя правила рекурсии> :-
<список предикатов>, (1)
<предикат условия выхода>, (2)
<список предикатов>, (3)
<имя правила рекурсии>, (4)
<список предикатов>. (5)
Лабораторные средства:
каталог LRPR2000 с подкаталогом GEOLAB и файлами
prolog.exe - экспертная оболочка "Тurbo-prolog",
prolog.cfg - текущая конфигурация системы,
prolog.err - расшифровка диагностических кодов,
prolog.hlp - описание системы "Turbo-prolog",
prolog.lib, prolog.ovl - вспомогательные подсистемы "Тurbo-prolog".
prolab1-..-8.doc - описания лабораторных работ 1-..-8.
work2-..-8.pro - рабочие файлы, содержащие на языке "Тurbo-prolog" примеры программ
ТИПОВАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ 3:
1) Распаковать на диск D файл prolog00.arj с созданием каталога LRPR2000
arj x -r prolog00.arj d:\
-
Изучить лабораторное задание prolab3.doc и войти в оболочку prolog.exe
-
Изучить структуру и функции программы ГОРОДА на языке Турбо-пролог в файле work3.pro, скомпилировать и выполнить ее как в DOS, так и в диалоге.
-
Разработать, ввести, скомпилировать и исполнить в диалоге программу, реализующую метод повтора, определяемого пользователем, получив у преподавателя номер своего варианта.
-
Модифицировать программу по пункту 4), скомпилировать и исполнить в диалоге для своего варианта, применив вместо метода повтора метод обобщенной рекурсии, прерываемой вводом некоторого символьного или числового пароля или парольной комбинации.
-
Сдать лабораторную работу 3, предъявив результаты диалога с созданными программами по пунктам 4) и 5), и сохранить нужные Вам файлы в Вашем Рабочем Каталоге.
-
Уничтожить созданный Вами каталог LRPR2000 на диске D со всем содержимым.
Список вариантов работы 3.
-
Прием с клавиатуры двух вещественных чисел и выдача на экран их отношения с прерыванием при делении на 0.0.
-
Прием с клавиатуры двух целых чисел и выдача их на экран с прерыванием при вводе 1 в качестве первого числа.
-
Прием с клавиатуры трех целых чисел и выдача на экран их суммы с прерыванием при получении 111 в качестве суммы.
-
Прием с клавиатуры вещественных чисел и выдача их на экран с прерыванием при вводе числа 0.111.
-
Прием с клавиатуры двух целых чисел и выдача на экран их отношения с прерыванием при получении нецелого отношения.
-
Прием с клавиатуры двух вещественных чисел и выдача их на экран с прерыванием при вводе 1.111 в качестве второго числа.
-
Прием с клавиатуры трех вещественных чисел и выдача на экран их суммы с прерыванием при получении 101.010 в качестве суммы.
-
Прием с клавиатуры целых чисел и выдача на экран их произведения с прерыванием при получении нечетного произведения.
-
Прием с клавиатуры пар символов и выдача их на экран с прерыванием при вводе символа W в качестве второго из пары.
-
Прием с клавиатуры двух целых чисел и выдача на экран их разности с прерыванием при вводе 9 в качестве второго числа.
-
Прием с клавиатуры целых чисел и выдача их на экран с прерыванием при вводе числа 0.
-
Прием с клавиатуры двух целых чисел и выдача на экран их произведения с прерыванием при получении 999 в качестве произведения.
-
Прием с клавиатуры трех целых чисел и выдача на экран их произведения с прерыванием при вводе четного третьего числа.
-
Прием с клавиатуры пар символов и выдача их на экран с прерыванием при вводе
символа * .
-
Прием с клавиатуры двух целых чисел и выдача их на экран с прерыванием при вводе четного числа в качестве второго.
Е.Авдеев 01.09.00.