Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Задание на лабораторную работу.




Основы логического программирования

С использованием языка пролог

 

Лабораторный практикум

 

 

Благовещенск

Издательство АмГУ


ББК 32.973-018я73

А39

 

Рекомендовано

Учебно-методическим советом университета

Рецензенты:

Гетман А.Н. кафедра прикладной информатики и математики, Благовещенский филиал НОУ Московская академия предпринимательства при правительстве Москвы;

Теличенко Д.А., доцент кафедры автоматизации производственных процессов и электротехники АмГУ, канд. техн. наук.

 

Акилова И.М., Назаренко Н.В.

Основы логического программирования с использованием языка Пролог: лабораторный практикум / И.М. Акилова, Н.В. Назаренко. – Благовещенск: Изд-во АмГУ, 2011. – 116 стр.

 

 

Лабораторный практикум содержит описание основных конструкций языка логического программирования ПРОЛОГ, используемого при разработке экспертных систем и баз знаний. Иллюстративные примеры позволяют получить представление о приемах построения логических программ. Предлагаемые для самостоятельного решения задачи, служат для накопления практического опыта разработки программ.

Лабораторный практикум предназначен для студентов специальности 230102 - «Автоматизированные системы обработки информации и управления», 230201 - «Информационные системы и технологии».

 

ББК 32.973-018я73

 

 

© Акилова И.М., Назаренко Н.В, 2011

© Амурский государственный университет, 2011


Введение

 

Пролог является результатом многолетней исследовательской работы. Первая официальная версия Пролога разработана Аланом Кольмароэ (ALain Colmerauer) в Марсельском университете во Франции в начале 1970-х годов как инструмент для программирования логики. В результате своего развития появился язык более мощный, чем такие хорошо известные сегодня языки программирования, как Паскаль и Си.

Пролог известен как декларативный язык. Это означает, что при заданных необходимых фактах и правилах, Пролог будет использовать дедуктивные умозаключения для решения задач программирования. Эта его отличительная особенность выгодно контрастирует с традиционными процедурными языками.

Пролог является очень важным инструментом в программировании приложений искусственного интеллекта и в разработке экспертных систем. Высокий уровень абстракции, легкость и простота в представлении сложных структур данных, возможность моделировать логические отношения между объектами и процессами существенно облегчают решение задач в различных предметных областях.

Пролог - язык программирования, в котором решения компьютерных задач выражаются с помощью фактов, представляющих отношения между объектами, и правил, специфицирующих выводимые из фактов следствия. Механизмы представления знаний объектах и отношениях в Прологе являются одновременно и высокоуровневыми и многоцелевыми. Это дает программисту два существенных преимущества. Первое, весьма ощутимое преимущество состоит в том, что программист освобождается от необходимости вникать в организацию физической памяти, отводимой для данных, которыми манипулирует программа. Второе преимущество состоит в той легкости, с которой в этом языке могут быть выражены сущности и отношения из самых различных областей человеческой деятельности.

Лабораторная работа № 1

ИЗУЧЕНИЕ РАБОТЫ С ИНТЕГРИРОВАННОЙ ОБОЛОЧКОЙ СИСТЕМЫ ТУРБО ПРОЛОГ.

 

Цель работы: Освоение основных режимов работы в интегрированной оболочке системы Турбо Пролог: редактирования, компиляции, отладки, ведения диалога и работы с файлами.

 

Краткие теоретические сведения

Турбо-Пролог, версия 2.0

Система Турбо Пролог версия 2.0 может работать на ПЭВМ, совместимых с IBM PC XT/AT и PS/2, с ОЗУ минимум 384 Кбайт и двумя НГМД по 360 Кбайт. Рекомендуется иметь ОЗУ 512/640 Кбайт и НМД типа "Винчестер". В файле сonfig.sys должно быть указано files=20 buffers=40.

Программа на Турбо Прологе состоит из следующих в определенном порядке секций и имеет следующую структуру [2]:

constants /* Секция объявления констант. Может отсутствовать */

domains /* Секция объявления нестандартных и/или составных типов данных. Может отсутствовать */

database - имя_ВБД /* Необязательная секция объявления предикатов для работы с внутренней базой данных (ВБД) */

predicates /* Секция объявления предикатов */

clauses /* Секция объявления правил и фактов */

goal /* Секция объявления внутренней цели. Может отсутствовать */

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

- комментарии в программе могут располагаться в программе на любом месте. Комментарий начинается либо с символа % либо с последовательности символов /* и заканчиваться */;

- в программе может использоваться только один раз секция GOAL;

- все предикаты в CLAUSES с одинаковыми именами должны записываться подряд;

- большинство стандартных предикатов выполняют несколько функций в зависимости от состояния параметров, входящих в предикат. Известные параметры называют входными (INPUT – (i)), неизвестные – выходными (OUTPUT – (o)). Совокупность входных параметров определяет работу предиката. Эта совокупность называется проточным шаблоном.

Интегрированная оболочка системы Турбо-Пролог предоставляет следующие возможности:

- создавать и редактировать тексты программ;

- выполнять и отлаживать программы;

- транслировать программы в объектные файлы;

- компоновать объектные файлы в исполняемые модули;

- получать справочную информацию, изменять размеры окон и их цвет;

- устанавливать параметры и конфигурацию системы.

При первоначальном входе в интегрированную среду Турбо-Пролога на экране монитора появляется главное меню (рис.1). В верхней строке находятся названия 6 основных режимов работы системы. Текущее положение в меню отмечено выделяющейся по цвету и яркости прямоугольной полоской. Перемещая эту полоску (курсор) с помощью клавиш с горизонтальными стрелками нажатием клавиши Enter можно выбрать необходимый режим. Это можно сделать также одновременным нажатием клавиши Alt и первой буквы названия соответствующего меню, например, для выбора режима редактирования достаточно нажать Alt-E.

Для удобства работы для наиболее часто используемых операций в оболочке Турбо Пролога вместо выбора из меню (или подменю) можно использовать нажатие функциональных клавиш, либо определенного сочетания клавиш (Hot keys). Действие той или иной функциональной клавиши может быть различным в зависимости от того, в каком режиме находится система. Более полную подсказку можно получить нажатием клавиш Alt-H.

 

Files Edit Run Compile Options Setup

Editor Dialog

Line 1 Col 1 WORK.PRO Indent Insert

 

Message Trace

 

 

Use first letter of option or select with ® or

Рис. 1

Экран разделен на 4 окна:

- окно редактора текстов, в которое загружаются отлаживаемые или редактируемые программы;

- окно диалога является по умолчанию окном, если в программе не назначены другие, ввода и вывода из программы;

- окно для вывода сообщений системы;

- окно сообщений отладчика (трассировки).

Первоначальное разделение экрана может быть изменено в режиме Setup. Окно, в котором находится курсор, называется текущим окном.

Нижняя строка является строкой подсказки или иначе навигационной строкой. Навигационную строку вверху, показывающую местоположение курсора (Line - номер текущей строки, Col - позиция курсора в строке), название редактируемого файла и режимы редактирования, имеет также окно редактирования. Если имя редактируемого фала не задано, то по умолчанию он называется WORK.PRO. Если файл с таким именем находится в текущей директории, то он автоматически загружается в окно редактирования.

Все режимы главного меню, кроме Edit и Run, содержат дополнительные подменю. Выход из любого подменю осуществляется нажатием клавиши Esc.

Цикл разработки программы

Турбо Пролог поддерживает в широком смысле структурное программирование и сопровождение проекта. Цикл разработки программы (без постановочной части) можно представить следующей схемой:

1. С помощью встроенного редактора текстов исходный текст программы вводится в систему.

2. Периодически, по мере ввода новых предикатов, программа транслируется для выявления синтаксических ошибок, которые тут же устраняются.

3. С помощью встроенных средств трассировки производится отладка каждого нового предиката.

4. Периодически производится структуризация программы. Независимые части программы выделяются в отдельные модули.

5. Процесс повторяется до получения программы, удовлетворяющей внешним спецификациям, которые, в частности, сами могут быть написаны на Турбо Прологе.

Основные режимы работы

Основные режимы работы [2] заданы главным меню в верхней строке экрана. Такими режимами являются:

Files - работа с файлами и взаимодействие с MS-DOS

Edit - ввод и редактирование программы

Run - выполнение и отладка программы

Compile - трансляция и компоновка программы

Options - установка режимов компиляции

Setup - установка режимов работы оболочки

Работа с файлами и взаимодействие с MS-DOS

2.1. Работа с файлами и взаимодействие с MS-DOS

При выборе режима Files в верхней части экрана под словом Files появится подменю (рис. 2.).

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

Files Edit Run Compile Options Setup

Editor Dialog

Load

Pick

New file

Save

Write to

Directory

Change dir

DOS shell

Quit

Рис. 2

Load – позволяет загрузить исходный текст программы на Прологе в окно редактора для его последующей модификации, выполнения или отладки.

Pick – позволяет работать из оболочки Турбо-Пролога одновременно с 8-ю файлами.

New file – очистка окна редактора текстов для ввода нового файла.

Save – сохранение редактируемой программы в файле на диске.

Write to – запись редактируемой программы в заданный файл на диске.

Directory – вывод содержимого указанной директории на экран.

Change dir – смена текущей директории. Равносильна команде ChDir в MS DOS.

OS shell – выполнение команды операционной системы. Выход из системы Турбо-Пролог в MS-DOS с возвратом по команде EXIT.

Quit – окончание работы. Выход из системы Турбо-Пролог в MS-DOS.

При работе с файлами приняты следующие соглашения об их типах:

.PRO – файл с исходным текстом программы

.BAK – файл сохранения после редактирования

.PRJ – файл с именами модулей, входящих в проект разрабатываемой системы

.EXE – исполняемый файл после компоновки

.OBJ – объектный файл после трансляции

.ARC – упакованный файл архивации

2.2. Ввод и редактирование программы

Встроенный редактор интегрированной оболочки Турбо-Пролога имеет набор команд, который является подмножеством команд широко известного редактора текстов WordStar. Кроме того, при редактировании можно пользоваться более короткими командами, пользуясь функциональными и управляющими клавишами.

Все команды редактирования можно переопределить, однако учитывая, что они совпадают с оболочками языков Турбо Паскаль, Турбо Си и Турбо Бейсик, это не рекомендуется делать.

Как и при работе с обычным текстовым редактором, ввод может происходить в режиме вставки текста или в режиме наложения его на уже существующий. Переход с одного режима в другой осуществляется нажатием клавиши Ins.

В случае слияния файлов, копирования блока из одного файла в другой и т.п. в системе Турбо Пролог может быть открыто дополнительное окно редактирования (Aux Editor) в нижнем правом углу экрана.

Команды редактора [2] условно делятся на команды перемещения, команды удаления текста, команды работы с блоками текста и вспомогательные. Выход из редактора в главное меню - F10 или по одновременному нажатию клавиши Alt и клавиши с первой буквой имени соответствующего режима.

Команды перемещения

Направление перемещения Клавиши
Курсор вправо на один символ Стрелка вправо или Ctrl-D
Курсор влево на один символ Стрелка влево или Ctrl-S
Курсор вверх на одну строку Стрелка вверх или Ctrl-E
Курсор вниз на одну строку Стрелка вниз или Ctrl-X
Курсор вправо на одно слово Ctrl-Стрелка вправо
Курсор влево на одно слово Ctrl-Стрелка влево
Курсор в конец строки End
Курсор в начало строки Home
Курсор в начало окна Ctrl-Home
Курсор в конец окна Ctrl-End
Курсор вверх на один экран PgUp или Ctrl-R
Курсор вниз на один экран PgDn или Ctrl-C
Курсор в начало файла Ctrl-PgUp или Ctrl-Q R
Курсор в конец файла Ctrl-PgDn или Ctrl-Q C

 

Команды удаления текста

Название команды Клавиши
Удаление символа над курсором Del
Удаление символа слева от курсора BackSpace или Ctrl-H
Удаление слова над курсором Ctrl-T
Удаление строки над курсором Ctrl-Y
Удаление начала строки до курсора Ctrl-Q T
Удаление от курсора до конца строки Ctrl-Q Y

 

Если при редактировании программы возникли какие-либо трудности, то нажатие клавиши F1 вызовет следующее меню системы подсказки:

Edit Help – [Помощь при редактировании] Заголовок меню

Show help file – вывод на экран файла справочника по всей системе. Нажатие F5 позволяет увеличить окно со справочником до размеров экрана. Повторное нажатие уменьшит его до прежних размеров. Выход из справочника по Esc.

Сursor movement – вывод на экран справочника по командам для перемещения курсора.

Insert & Delete – справочник по операциям вставки и удаления текста.

Block Functions – справочник по операциям над блоками текста.

WordStar-like – справочник по командам редактирования, аналогичным командам редактора текстов WordStar.

Miscellaneous – справочник по командам редактирования не входящим в какую-либо группу.

Global functions – справочник по командам, выполняющим операции над всем текстом.

Hot keys – справочник по клавишам для быстрого выполнения наиболее часто встречающихся операций. При этом выбранная с помощью клавиш со стрелками операция может быть тут же выполнена.

2.3. Выполнение и отладка программы

Режим Run обеспечивает компиляцию находящейся в окне редактора текстов программы и ее выполнение. Этот режим обеспечивает быструю интерактивную отладку программы, так как при обнаружении синтаксических и семантических ошибок имеется возможность их тут же исправить. Мощным инструментом отладки программ в системе являются встроенные средства трассировки.

Возможны следующие виды трассировки:

– пошаговая трассировка всей программы

– трассировка заданных предикатов

– трассировка в режиме оптимизации

– интерактивное включение/выключение трассировки

– интерактивный вывод результатов трассировки и выходных сообщений на печать и в дисковый файл.

Отметим, что трассировка является также важным средством изучения Турбо Пролога, так как, в случае непонимания работы какого-либо предиката, его работу можно посмотреть по шагам.

По умолчанию режим трассировки выключен (Off). Для установки/отключения режима трассировки следует выбрать подменю "Директивы компилятора" меню Options и в нем выбрать вход Trace. На экране появится небольшое меню, содержащее три входа:

Trace – включить режим полной трассировки;

ShortTrace – включить режим сокращенной трассировки;

Off – выключить трассировку.

Если выбрать Trace (выход из всех подменю по Esc), то после запуска программы на выполнение (Run или Alt-R) в окне диалога появится подсказка Goal:. После ввода цели, в окне трассировки за словом CALL: появляется вызываемый предикат.

Нажатие клавиши F10 разрешает выполнение следующего шага программы. Одновременно в окне редактирования курсор показывает на выполняемый в текущий момент предикат.

После подсказки REDO: отображаются результаты вычисления (унификации).

При успешном поиске подстановке после слова RETURN: выводится ее результат. При неудаче выводится подсказка FAIL.

Трассировка в любой момент может быть прекращена нажатием клавиши Esc.

Нажатие Alt-T позволяет изменить режим трассировки. При этом на экране появляется следующее меню:

Status On Запрет/разрешение отображения статуса

Trace window On Запрет/разрешение окна трассировки

Edit window On Запрет/разрешение окна редактирования

 
 


После нажатия Shift-F10 можно по желанию изменить размеры окон.

Внутри программы можно размещать передикат trace(on), который включает режим трассировки, или trace(off) – выключающий ее.

Нажатие клавиш Alt-P позволяет перенаправить вывод результатов трассировки на печать или в файл PROLOG.LOG на диске.

Режим ShortTrace отличается от Trace только тем, что компилятор производит оптимизацию программы (в режиме Trace оптимизацияне производится). Это особенно важно при отладке рекурсивных вызовов, особенно при "хвостовой рекурсии", когда рекурсивный вызов является последней подцелью в теле предиката. Этот вид рекурсивных вызовов оптимизируется Турбо Прологом и преобразуется в цикл, что экономит память при исполнении.

2.4. Трансляция и компановка программ

Подменю режима Compile содержит следующие входы:

Memory – отладочная трансляция в память

OBJ file – трансляция в файл типа.OBJ

EXE file (auto link) – трансляция с созданием исполняемого (.EXE) файла с автоматической компоновкой модулей

Project (all modules) –трансляция всех входящих в проект модулей;

Link only – выполнение компоновки модулей в исполняемый файл.

2.5. Установка режимов компиляции

Исходный текст программы на Турбо Прологе перед выполнением проходит обязательную фазу компиляции и компоновки. Для определения параметров этих процессов служит режим Options.

Меню режима Options содержит следующие входы:

Link options (Опции компоновки)

Содержит подменю:

Map file ON/OFF - создавать или нет файл с картой компоновки.

Libraries - ввод имен пользовательских библиотек для компоновки.

Edit PRJ file (Редактирование файла с описанием проекта)

Запрашивается имя файла, в котором перечислены модули, входящие в проект. Этот файл затем используется компоновщиком.

Compiler Directive (Директивы компиляции)

Содержит подменю (названия входов даны в круглых скобках) позволяющие установить:

– распределение памяти (Memory allocation) под код, стек, тип и рекурсию. Размер этих областей устанавливается в параграфах (параграф равен 16 байтам);

– какие виды контроля выполнять во время исполнения программы (Run-time check): нажатие клавиши Breack, нарушение границ стека и целочисленное переполнение;

– допустимый уровень ошибок трансляции (Error level): ошибки недопустимы, по умолчанию (1), максимальный (2);

– выдачу предупреждения при наличии недетерминированных предикатов (Non-determ warning ON/OFF);

– предупреждение о наличии переменных, которые используются в предикате только один раз (Variable used once warning ON/OFF);

– уровень трассировки (Trace): полная, сокращенная и трассировка выключена;

– включение вывода диагностики по результатам трансляции (Diagnostics ON/OFF).

2.6. Получение справочной информации, изменение размеров окон и их цвета

Подменю режима SetUp содержит следующие входы:

Colors – изменение цвета окон при наличии цветного монитора. На экран выводится таблица цветовой гаммы, из которой для каждого окна выбирается цвет фона и цвет изображения;

Window size – изменение размеров окон. При выборе этой опции в нижней строке экрана появляется подсказка, как с помощью клавиш со стрелками изменить размер или местоположение окна.

Directories– установка директорий по умолчанию.

Miscellaneous – разные опции связанные с настройкой на адаптер видеомонитора;

Load SYS file – загрузка файла с параметрами интегрированной среды;

Save SYS file сохранение параметров настройка среды интегрированной среды в файле типа *.SYS.

Стандартные предикаты

3.1. Общесистемные стандартные предикаты

В этом разделе приведены предикаты [2], позволяющие использовать возможности предоставляемые операционной системой MS DOS.

· date(Год,Месяц,День) (integer, integer, integer): прототип (o,o,o) – cчитывает системную дату, прототип: (i,i,i) – установить дату.

Например:

date(J,M,T) – результат: J=2001,M=11,T=01

date(2001,02,26) – системная дата устанавливается на 26.02.2001.

· time(Час, Минуты, Секунды, Сотые_секунды) (integer, integer, integer, integer): прототип (o,o,o,o) – связывает соответствующие параметры с текущим временем, прототип (i,i,i,i) – устанавливает системное время.

Например:

time(S,M,Sek,_) – результат: S=15,M=35,Sek=22

time(17,05,0,0) – часы будут поставлены на 17:05:00.

· system(Строка_с_командой_DOS) (string): прототип (i) – заданная строка должна быть допустимой командой DOS. Разрешаются встроенные и внешние команды DOS, такие как файлы с расширением ".BAT". Заданная команда выполняется. Предикат system не выполняется, если команда некорректна с точки зрения DOS. Если "Строка_с_командой_DOS" пустая (""), то COMMAND.COM активируется в интерактивном режиме.

Например: system("dir A:") – выводится каталог накопителя А.

· comline(Строка) (string): прототип (o) – читает параметры, которые заданы в команде вызова скомпилированной программы на Турбо – Прологе.

Например: TEST abc (вызов в MS - DOS) – если в программе с именем TEST стоит команда comline(Х), то строка abc будет связана с Х.

· beep – производит звуковой сигнал

· bios(Номер_прерывания,Регистры_входные,Регистры_выходные)

(integer, reg, reg): прототип (i,i,o) – обеспечивает формирование прерывания с заданным номером. Регистры получают значения, установленные параметром "Регистры_входные". После обработки прерывания содержимое регистров связывается с параметром "Регистры_выходные". Параметры "Регистры_входные" и "Регистры_выходные" должны принадлежать домену regdom, который определяется следующим образом:

regdom = reg(AX, BX, CX, DX, SI, DI, DS, ES), где все аргументы имеют тип integer.

Например: bios($21, reg(АХ,0,0,0,0,0,0,0),reg(Nr,_,_,_,_,_,_,_)) – производится чтение с текущего накопителя. Номер накопителя связывается с Nr.

3.2. Предикаты преобразования типов

· char_int(Символ,Число) (char,integer): прототип (i,o) – связывает параметр "Число" с кодом ASCII параметра "Символ"; прототип (o,i) – связывает параметр "Символ" с символом, код которого определяется параметром "Число"; прототип (i,i) – выполняется успешно, если код, определяемый параметром "Число", является ASCII – кодом символа, определяемого параметром "Символ".

Например:

char_int(’A’,X) – переменная X принимает значение 65.

char_int(X,66) – переменная X принимает значение ‘B’.

char_int(‘A’,65) – выполняется успешно.

· str_char(Строка,Символ) (string,char): прототип: (i,o) – заданная первым параметром строка, состоящая из единственного символа, преобразуется в символ. Символ связывается со вторым параметром; прототип (o,i) – преобразуется символ в строку, состоящую из единственного символа и связывает ее с заданной переменной; прототип: (i,i) – выполняется успешно, если параметры связаны с представлениями одного и того же символа.

Например:

str_char(“A”,X) – результат X=’A’.

str_char(X,’A’) – результат X=”A”.

str_char(“A”,‘A’) – выполняется успешно.

· str_int(Строка,Целое число) (string,integer): прототип:(i,o) – преобразует cтроку в целое число. Число связывается со вторым параметром; прототип (o,i) – связывает с первым параметром строку, представляющую собой запись целого числа, связанного со вторым параметром; прототип(i,i) – выполняется успешно, если связанная с первым параметром строка является представлением числа, связанного со вторым параметром.

Например:

str_int(“123”,X) – результат: X=123

str_int(X,456) – результат: X=”456”

str_int(“234”,234) – выполняется успешно.

· str_real(Строка,Действительное число) (string,real): прототип:(i,o) – связывает второй параметр с действительным числом, определяемым записью числа в строке, заданной первым параметром; прототип (o,i) – связывает с первым параметром строку, представляющую собой запись действительного числа, заданного вторым параметром; прототип:(i,i) – выполняется успешно, если связанная с первым параметром строка является представлением числа, связанного со вторым параметром.

Например:

str_real(“1.23”,X) – результат: X=1.23

str_real(X,0.56) – результат: X=”0.56”

str_real(“4.567”,4.567) – выполняется успешно.

· file_str(Имя_ файла_ DOS,Строка) (string,string): прототип (i,o) – читает строку из заданного файла и связывает ее с параметром "Строка". Максимально допустимый размер строки – 64 К. Признаком конца строки является символ Ctrl – Z (десятичный код ASCII=26).

Например:

file_str(“B:TEXT1”,X) – символы из файла TEXT1 на накопителе B будут прочитаны и связаны с переменной X.

· field_str(Строка, Столбец, Длина, Строка_символов) (integer, integer, integer, string): прототип (i,i,i,i) – записывает строку, связанную с параметром "Строка_символов", в поле, определяемое длинной и номерами строки и столбца. Если строка длиннее, чем заданное поле, то записывается только начало строки. Если строка короче, то оставшиеся позиции поля заполняются пробелами; прототип (i,i,i,o) – строка, определяемая длиной и позицией, связывается с параметром "Строка_символов". Проследите, чтобы поле в текущем окне соответствовало параметрам.

Например:

field_str(15,5,5,"hollo") – строка "hollo" записывается в поле, начинающееся с позиции (15,5).

field_str(10,30,5,Х) – строка длиной 5, начинающаяся с позиции (10,30), связывается с переменной Х.

· str_len(Строка,Длина) (string,integer): прототип (i,o) – с параметром "Длина" связывается количество символов в заданной строке; прототип (i,i) – выполняется успешно, если строка имеет заданную длину.

Например:

str_len("hollo", Х) – результат: Х=5.

str_len("book", 4) – выполняется успешно.

· isname(Строка) (string) прототип (i) - выполняется успешно, если последовательность символов, связанная с параметром, представляет собой имя, допустимое в Турбо – Прологе.

Например:

isname ("abcd") – выполняется успешно.

· upper_lower(Строка1,Строка2) (string, string): прототип (i,i) – выполняется успешно, если с первым и вторым параметром связаны идентичные строки, представленные соответственно прописными и строчными буквами; прототип (i,o) – связывает со вторым параметром строку, полученную из строки, связанной с первым параметром, заменой прописных букв на строчные; прототип (o,i) – связывает с первым параметром строку, полученную из строки, связанной со вторым параметром, заменой строчных букв на прописные.

Например:

upper_lower("А","a") – выполняется успешно.

upper_lower("ZDF",X) – результат: X="zdf"

upper_lower(Х,"house") – результат: Х="HOUSE"

3.2. Арифметические операции

+ сложение; – вычитание; * умножение; / деление; mod абсолютная величина; div целочисленное деление

3.3. Операторы отношений

Операторы отношений являются инфиксными операторами (т.е. должны находится между двумя сравниваемыми величинами). Свободные переменные в операторах отношений не допускаются. Для операторов отношений приняты следующие обозначения:

< меньше; > больше; = равно; <= меньше или равно; >= больше равно; <> не равно.

3.4. Математические функции

Функция Описание

abs(X) /* (Var) (i) */ Возвращает абсолютное значение Х

round(X) /* (Var) (i) */ Возвращает округленное целое значение Х

sqrt(X) /* (Var) (i) */ Возвращает квадратный корень из Х

trunc(X) /* (Var) (i) */ Возвращает целое значение Х отбрасывая

дробную часть

exp(X) /* (Var) (i) */ Возвращает значение е в степени Х

log(X) /* (Var) (i) */ Возвращает десятичный логарифм Х

ln(X) /* (Var) (i) */ Возвращает натуральный логарифм Х

arctan(X) /* (Radians) (i) */ Возвращает арктангенс Х

cos(X) /* (Radians) (i) */ Возвращает косинус Х

sin(X) /* (Radians) (i) */ Возвращает синус Х

tan(X) /* (Radians) (i) */ Возвращает тангенс Х

Все тригонометрические функции требуют, чтобы аргумент X задавался в радианах.

Задание на лабораторную работу

Последовательность действий:

1. Изучить структуру программы языка Турбо-Пролог.

2. В соответствии с вариантом задания, определенным преподавателем, составить Пролог-программу задания.

3. Оформить отчет с указанием варианта задания, правил, текста программы и протокола выполнения программы.

Варианты заданий

Задание: Имеется N объектов и заданы отношения между ними: Родитель, мужчина, женщина. Требуется определить новое отношение и выявить круг лиц, ему удовлетворяющих.

Варианты:

1. Определить предикат отец и найти всех отцов.

2. Определить предикат мать и найти всех матерей.

3. Определить предикат дети и найти всех детей и детей конкретного лица.

4. Определить предикат внуки и найти всех внуков и внуков конкретного лица.

5. Определить предикат сын и найти всех сыновей и сыновей конкретного лица.

6. Определить предикат дочь и найти всех дочерей и дочерей конкретного лица.

7. Определить предикат дедушка и найти всех дедушек и дедушку конкретного лица.

8. Определить предикат бабушка и найти всех бабушек и бабушку конкретного лица

9. Определить предикат двоюродный дедушка и найти всех двоюродных дедушек и двоюродных дедушек конкретного лица.

10. Определить предикат двоюродная бабушка и найти всех двоюродных бабушек и двоюродных бабушек конкретного лица

11. Определить предикат тетя и найти всех тетей и тетей конкретного лица

12. Определить предикат дядя и найти всех дядей и дядей конкретного лица.

13. Определить предикат брат и найти всех братьев и братьев конкретного лица.

14. Определить предикат сестра и найти всех сестер и сестер конкретного лица.

15. Определить предикат двоюродный брат и найти всех двоюродных братьев и двоюродных братьев конкретного лица.

16. Определить предикат двоюродная сестра и найти всех двоюродных сестер и двоюродных сестер конкретного лица.

17. Определить предикат племянник и найти всех племянников и племянников конкретного лица.

18. Определить предикат потомок и найти всех потомков и потомков конкретного лица.

19. Определить предикат предок и найти всех предков и предков конкретного лица.

20. Определить предикат потомки мужского пола и найти всех потомков мужского пола и потомков мужского пола конкретного лица.

21. Определить предикат потомки женского пола и найти всех потомков женского пола и потомков женского пола конкретного лица.

22. Определить предикат предки мужского пола и найти всех предков мужского пола и предков мужского пола конкретного лица.

23. Определить предикат предки женского пола и найти всех предков женского пола и предков женского пола конкретного лица.

24. Определить предикат потомки по мужской линии и найти всех потомков по мужской линии и потомков по мужской линии конкретного лица.

25. Определить предикат потомки по женской линии и найти всех потомков по женской линии и потомков по женской линии конкретного лица.

26. Определить предикат предки по мужской линии и найти всех предков по мужской линии и предков по мужской линии конкретного лица.

27. Определить предикат предки по женской линии и найти всех предков по женской линии и предков по женской линии конкретного лица.

28. Определить предикат троюродный брат и найти всех троюродных братьев и троюродных братьев конкретного лица.

29. Определить предикат троюродная сестра и найти всех троюродных сестер и троюродных сестер конкретного лица.

30. Определить предикат внучатый племянник и найти всех внучатых племянников и внучатых племянников конкретного лица.

Контрольные вопросы

1. Из каких основных секций состоит программа на языке Пролог?

2. В какой последовательности записываются необходимые для работы программы на Прологе предикаты?

3. Какие ограничения следует соблюдать при составлении программы на Прологе?

4. Какие возможности предоставляет интегрированная оболочка системы Турбо-Пролог?

5. Каков цикл разработки программы на Прологе?

6. Что такое трассировка программы на Прологе?

7. Какие виды трассировки возможны?

8. Назовите стандартные общесистемные предикаты, позволяющие использовать возможности предоставляемые операционной системой?

9. Назовите предикаты преобразования типов и их функции.

10. Какие математические функции используются при составлении программы на Прологе?

Лабораторная работа № 2

РЕКУРСИЯ

Цель работы: изучить понятие рекурсии и способы построения рекурсивных процедур в Прологе, разработать программу с использованием рекурсии.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...