Главная » Лекции по » Технические » ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ Сборник лабораторных работ

ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ Сборник лабораторных работ

КАФЕДРА АВТОМАТИКИ И ТЕЛЕМЕХАНИКИ
ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
СБОРНИК ЛАБОРАТОРНЫХ РАБОТ
МЕТОДИЧЕСКИЕ УКАЗАНИЯ ДЛЯ СТУДЕНТОВ
ДНЕВНОГО ОБУЧЕНИЯ

КАФЕДРА АВТОМАТИКИ И ТЕЛЕМЕХАНИКИ

ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

СБОРНИК ЛАБОРАТОРНЫХ РАБОТ

МЕТОДИЧЕСКИЕ УКАЗАНИЯ ДЛЯ СТУДЕНТОВ
ДНЕВНОГО ОБУЧЕНИЯ

Лабораторная работа № 1
Операции ввода и вывода на языке Пролог

Цель и задача работы: Научиться использовать предикаты ввода-вывода.
Пролог (от «ПРОграммирование в терминах ЛОГики») — это язык программирования вы-сокого уровня, предназначенный для представления и использования знаний о некоторой предметной области.
Наиболее распространенные языки программирования — Бейсик, Си, Паскаль являются языками процедурного программирования. В них программист должен в явном виде задать по шагам все выполняемые действия и описать все объекты над которыми эти действия про-изводятся.
В противоположность этому в Прологе — декларативном языке логического программиро-вания — с помощью некоторых правил и утверждений описываются объекты предметной об-ласти и знания о них. Знания выражены в виде множества отношений между объектами (от-дельными элементами конкретного типа, которым обычно присваиваются имена).
Отношения описывают свойства объектов и связи между ними. При определении отноше-ния между объектами в Прологе важен порядок, в котором эти объекты входят в отношение.
В логике используется термин ‘предикат’ — логическое выражение (функция), с неопреде-ленными переменными, при выборе конкретных значений для которых выражение преобра-зуется в истинное или ложное высказывание.
Так как Пролог — язык логического программирования, то в нем для описания отношений применяется понятие предиката. Каждый предикат определяется своим именем и своими ар-гументами (параметрами).
Предложение в Прологе – это правило для определения предиката, сопровождающееся точкой. Предложения бывают трех типов: факты, правила и запросы. Есть существенное раз-личие между фактами и правилами……

Лабораторная работа №2.
Арифметические операции в языке Пролог.

Цель работы: в данной работе требуется написать программу, вводящую данные с клавиатуры, выполняющую арифметические операции и выводящую результат на экран дисплея.
Теоретические сведения.
1. Арифметические операторы.
Пролог рассчитан главным образом на обработку символической информации, при которой потребность в арифметических выражениях относительно мала. Поэтому и средства для таких вычислений довольно просты. В языке Пролог имеется ряд встроенных предика-тов, предназначенных для вычисления арифметических выражений. В Прологе арифметиче-ские выражения вычисляются только тогда, когда они служат аргументами одного из таких встроенных предикатов.
Для осуществления основных арифметических действий можно воспользоваться сле-дующими операторами:
+ сложение;
— вычитание;
* умножение;
/ деление;
mod остаток от деления целых чисел;
div целочисленное деление.

Заметим, что эти операторы являются встроенными предикатами…..

Лабораторная работа №3.
Тема: Рекурсия в языке программирования Пролог

Цель и задача работы: изучение понятия рекурсии. Использование рекурсии в Прологе.
Теоретические положения
Рекурсия является мощным методом программирования. В Прологе она приобретает особую важность, поскольку здесь отсутствует циклические конструкции типа while…do… , repeat…until и for…, присущие другим языкам программирования (например в С). Покажем на примере задачи о родственных связях использование рекурсии.
Пусть дано дерево родственных отношений, представленное на рис. 1. Каждая пара вершин, соединенная направленным ребром (стрелкой), связана отношением родитель….

Лабораторная работа №4
ОГРАНИЧЕНИЕ ПЕРЕБОРА ПРИ ПОМОЩИ ОТСЕЧЕНИЯ

Цель и задача работы: изучить синтаксис и случаи использования отсечения в языке про-граммирования Пролог.
Теоретические положения
Программа на Прологе представляет собой совокупность фактов, отношений и целей. Факты тоже являются отношениями, но они всегда истинны. Истинность некоторого отно-шения зависит от значений переменных, связанных данным отношением.
Выполнение программы на Прологе состоит в выяснении условий, при которых цели яв-ляются истинными отношениями. Это называется достижением цели. Достичь цели – озна-чает показать, что данное отношение истинно и следует из совокупности фактов и отноше-ний. При этом необходимо определить значения переменных, при которых данные отноше-ния истинны. Если цель невозможно достичь из совокупности фактов и отношений ни при каких значениях переменных, то решений не существует, так как истинность цели не дока-зуема.
В процессе достижения цели пролог-система осуществляет автоматический перебор вари-антов, делая возврат при неуспехе какого-либо из них. Такой перебор – полезный программ-ный механизм, поскольку он освобождает пользователя от необходимости программировать его самому. С другой стороны, ничем не ограниченный перебор может стать источником не-эффективности программы. Поэтому иногда требуется его ограничить или исключить вовсе. Для этого в Прологе предусмотрена конструкция “отсечение”, которая записывается в виде символа ’!’.
Можно выделить три основных случая использования отсечения. Оно применяется для
1. устранения бесконечных циклов,
2. при программировании взаимоисключающих утверждений,
3. при необходимости неудачного завершения доказательства цели…….

Лабораторная работа №5
ИСПОЛЬЗОВАНИЕ ТЕРМОВ

Цель и задача работы: изучить синтаксис и случаи использования термов в языке програм-мирования Пролог.
Теоретические положения
Объекты данных в Прологе называются термами. Терм – это либо константа, либо пе-ременная, либо структура (составной терм).
Терм записывается как последовательность литер, которые делятся на четыре категории:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9
+ – * / \\ ^ ~ : . ? @ # $ &
Первая строка состоит из прописных букв. Вторая строка – из строчных букв. В третьей строке – цифры. В четвертой строке перечислены специальные литеры (спецзнаки). В дейст-вительности спецзнаков больше, чем показано в четвертой строке, но остальные использу-ются только в особых случаях, обсуждаемых ниже. Для термов каждого типа, таких как кон-станта, переменная, структура, имеются свои правила образования имен термов из литер.
В Прологе константа может быть атомом или числом. Атом представляет собой произ-вольную последовательность символов, заключенную в одинарные кавычки. Когда атом вы-водится на печать, внешние символы кавычек обычно не печатаются. Атомы, состоящие только из чисел, букв и символа подчеркивания и начинающиеся со строчной буквы можно не заключать в кавычки.
Атом, который необязательно заключать в кавычки, может быть записан и в кавычках. За-пись с внешними кавычками и без них определяет один атом. Как правило, в программах на Прологе используются атомы без кавычек. Атом, начинающийся с /*, будет воспринят как начало комментария, если он не заключен в одинарные кавычки……….

Лабораторная работа №6
ИСПОЛЬЗОВАНИЕ СПИСКОВ

Цель и задача работы: изучить списки как структуру данных в языке программирования Пролог, некоторые полезные целевые утверждения для работы с ними.
Теоретические положения
Список — это простая структура данных, широко ис¬пользуемая в нечисловом программи-ровании. Список — это последовательность, составленная из произволь¬ного числа элементов. Чтобы объявить список целых чисел, мы должны написать следующее:
DOMAINS
integerlist= integer*
где звездочка (*) указывает на то, что в списке 0 или больше элементов. Объекты в списке могут быть чем угодно, включая другие списки. Однако, все элементы в списке должны при-надлежать одной и той же области и должно быть объявление области для объектов. Другой пример это список элементов типа символ.
DOMAINS
symblist=symbol*
Примером такого списка будет список слов энн, теннис, том, лыжи. На Прологе это за-писывается так: [ энн, теннис, том, лыжи ]
Однако таково лишь внешнее представление списков. Как мы уже знаем, все структурные объекты Пролога — это деревья. Списки не являются исключе¬нием из этого правила.
Каким образом можно представить список в виде стандартного объекта языка Пролог? Мы должны рас¬смотреть два случая: пустой список и не пустой список. В первом случае список записывается как [ ]. Во втором случае список следует рассмат¬ривать как структуру состоящую из двух частей:
(1) первый элемент, называемый головой списка (Head);
(2) остальная часть списка, называемая хвостом (Tail).
Например, для списка [ энн, теннис, том, лыжи ] энн — это голова, а хвостом является спи-сок [ теннис, том, лыжи ]……..

Лабораторная работа № 7
Трассировка на языке Пролог

Цель и задача работы: Изучить функцию трассировки в Турбо-Прологе и отрассиро-вать программу.
ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ
Трассировка — это осуществление пошагового отчета о выполнении программы, пока-зывающее все происходящие изменения.
Чтобы проследить за выполнением программы, необходимо добавить директиву ком-пилятора “trace” к началу программы. Т.е. программа должна начинаться следующим обра-зом:
trace
predicates
Директива компилятора “trace” имеет следующий формат:
trace трассировать все предикаты;
trace p1,p2,… трассировать только предикаты p1, p2, … .
Также включить режим трассировки вы можете из меню
Option*Compiler directives * Trace*(Trace/Shorttrace).
Рассмотрим конкретный пример.
Данная программа вставляет в список элемент на указанную позицию. Допишем к на-чалу программы директиву компилятора “trace”:
trace /* Директива компилятора */
domains
names=symbol* /* Объявление списка */
predicates
ins(integer,symbol,names,names) /* Описание предиката */
clauses
ins(1,El,List,[El|List]). /* Условие окончания */
ins(1,El,[H|T],[El,H|T]).
ins(C,El,[H1|T1],[H1|T2]):-C1=C-1,ins(C1,El,T1,T2).
Теперь выберем команду RUN и посмотрим, что происходит на экране. В окне редак-тора курсор остановится на начале выполняемого предиката и в окне трассировки начало выполнения задачи показывается как:
CALL: ins(2,\»a\»,[\»q\»,\»w\»,\»e\»,\»r\»],_)
Произошел вызов предиката ins.
Чтобы выполнить очередной шаг задачи необходимо использовать, клавишу F10. На-жмите F10 один раз, и окно трассировки теперь покажет:
REDO: ins(2,\»a\»,[\»q\»,\»w\»,\»e\»,\»r\»],_)
Произошла подстановка параметров в предикат.
Далее при нажатии клавиши F10 Пролог выполняет следующие действия:
REDO: ins(2,\»a\»,[\»q\»,\»w\»,\»e\»,\»r\»],_)
1=1
CALL: ins(1,\»a\»,[\»w\»,\»e\»,\»r\»],_)………………..

Скачать полную версию можно по ссылке…
СКАЧАТЬ работу

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Закрепите на Pinterest