Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
1. Язык логического программирования Пролог. Концепция логического программирования. Язык Пролог является представителем семейства языков логического программирования. Пролог не является языком программирования в чистом виде. Его можно считать и оболочкой экспертной системы, и реализацией интеллектуальной базы данных. Фактически Пролог является не процедурным, а декларативным языком. В качестве типовых данных Пролог использует элементарные единицы данных, так называемые атомы строки символов и числа. Сама "программа" строится из последовательности фактов и правил, и затем формулируется утверждение, которое Пролог будет пытаться доказать с помощью введенных правил. Таким способом можно описывать очень сложные проблемы, которые будут решаться самим Прологом автоматически. Человек лишь описывает структуру задачи, а внутренний "мотор" сам ищет решение. Отличие от других языков: Программа на прологе не является алгоритмом. Пролог предназначен не для решения вычислительных или графических задач, а для решения логических задач. Пролог требует особого стиля мышления программиста. Программирование на прологе состоит из следующих этапов: Объявления некоторых фактов об объектах и отношениях между ними, Определение некоторых правил об объектах и отношениях между ними и Формулировки вопросов об объектах и отношениях между ними.
2. Основы программирования на Турбо-Прологе: структура программы, основные типы данных, работа с секцией domains. Программа на Турбо Прологе состоит из следующих семи разделов: директивы компилятора;CONSTANTS - раздел описания констант;DOMAINS - раздел описания доменов; DATABASE - раздел описания предикатов внутренней базы данных;PREDICATES - раздел описания предикатов; CLAUSES - раздел описания предложений(факты и правила); GOAL - раздел описания внутренней цели. GLOBAL DOMAINS, GLOBAL PREDICATES, GLOBAL используется в модульном программировании и означает, что ниже следующее объявление относится к нескольким программам.
Основные стандартные домены - это: integer - целое число от -32768 до 32767; real - действительное число от +1Е-307 до +1Е308; char - символ, заключенный в одиночные апострофы; string - последовательность символов, заключенная в двойные кавычки; symbol - символическая константа (начинающаяся со строчной буквы последовательность букв латинского алфавита, цифр и знаков подчеркивания или последовательность любых символов, заключенная в кавычки). Этот домен соответствует понятию атома; file - файл. file=<имя файлового домена1>;...;<имя файлового доменаN>. 1 формат: name=t (например, age, number=integer); 2 формат: mylist=elevent*(например, namlist=integer*); 3 формат: region=functor1(d1,d2,…);functor2(d3,d4,…);…(пример: 1.object=int(integer); str(string) 2.mesto=sprava; sleva). functor1, functor2 это имена альтернатив составной области. d1,d2, d3,d4 один из типов пролога, который является стандартным, либо определены в разделе domains.
3. Основы программирования на Турбо-Прологе: структура программы, внутренние и внешние цели. Указывается вопрос (цель), на который должен ответить Пролог. 1) Цель может быть внутренней и внешней (Отличия в том, что при использовании внешней пролог ищет все решения, а внутренней только первое). 2) Отправная точка логического вывода. 3) На любой запрос пролог будет пытаться дать ответ «yes» или «no», если решений нет, то ("No solution"). Запросы (цели ) 2 типа: 1 тип: Подтвердить справедливость факта или совокупность фактов. На запросы такого типа система выдает ответ «да» или «нет». 2 тип: В записях таких вопросов используют переменные последовательности символов русского или латинского алфавитов, начинающихся с прописной буквы или символа «_». В качестве ответов выводятся значения переменных, удовлетворяющих информации в БЗ. Переменные: Обязательно начинается с прописной буквы
Крайне желательно использовать осмысленные имена переменных. Анонимная переменная: Анонимной переменной называют знак подчёркивания «_»; Она используется когда конкретное значение переменной несущественно.
4. Основы программирования на Турбо-Прологе: структура программы, предикаты, факты, правила. Предикат конструкция вида: <имя>(<аргументы>) аргументы обозначают какие-то объекты или свойства объектов, а имя предиката связь или отношение между аргументами. Общий вид описание предиката: name(d1,d2,…). Факт это утверждение о том, что соблюдается некоторое отношение. Факт записывается в виде предиката, аргументы которого являются константами (символьными или числовыми). БД на Прологе совокупность фактов. БЗ состоит из совокупности фактов и правил. Правило предложение, носящее более общей характер, чем частный факт. Правило определяет новый предикат через предикаты, определенные ранее. <голова правила>:-<тело правила>. Тело правила выполняет роль условия (посылки) истинности головы правила: если истинно тело правила, то справедлива голова правила. <тело правила> - список ранее определённых фактов разделённых логической связкой И, ИЛИ, НЕ и т.д. Знак «:-» читается как «ЕСЛИ». Знак «,» читается как «И». Знак «;» читается как «ИЛИ».
5. Основы программирования на Турбо-Прологе: методы и средства управления поиском решения.Управление поиском с возвратом заключается в решении двух задач: включении поиска с возвратом при его отсутствии, и отключении поиска с возвратом при его наличии. Предикат fail, включает поиск с возвратом. Предикат ! (его называют «отсечение»), предотвращает поиск с возвратом. Действует предикат fail очень просто цель с использованием данного предиката НИКОГДА не доказывается, а, следовательно, всегда включается поиск с возвратом. Используется для поиска всех ответов если в программе присутствует внутренняя цель. Еще одно средство для управления поиском с возвратом это стандартный предикат ! (отсечение). Действие этого предиката прямо противоположно действию предиката fail. Если предикат fail всегда включает поиск с возвратом, то отсечение поиск с возвратом прекращает. Вид правила повтора, определяемого программистом: repeat. % повторить; repeat :- repeat. Когда при выполнении программы в одном из ее правил встретится подцель с предикатом repeat и выполнение следующих подцелей будет успешным, произойдет возвращение к подцели repeat для поиска других возможных решений, а ее обращение к правилу repeat создаст условия для отката и повторного выполнения следующих подцелей.
Для задания режима трассировки в начало программы вводится директива компилятору trace. CALL: (имя выполняемого предиката и значения его аргументов); RETURN: (возвращаемый предикат со звездочкой впереди) - когда предикат или правило удовлетворяются; FAIL: (предикат) - когда предикат не удовлетворяется (не FILE); REDO - показывает, что производится поиск с возвратом.
6. Основы программирования на Турбо-Прологе: рекурсия. Рекурсия это универсальное средство для организации повторяющихся действий в Prologе. Рекурсивная процедура это процедура, вызывающая сама себя до тех пор, пока не будет соблюдено некоторое условие, которое остановит рекурсию. Такое условие называют граничным. Рекурсия хороший способ для решения задач, содержащих в себе подзадачу такого же типа. Базисом рекурсии называют некую начальную ситуацию или ситуацию в момент прекращения. Как правило, в этом предложении записывается некий простейший случай, при котором ответ получается сразу, без использования рекурсии. Шаг рекурсии это правило, в теле которого обязаельно содержится, в качестве подцели, вызов определяемого предиката. Если мы хотим избежать зацикливания, определяемый предикат должен вызываться не от тех же параметров, которые указаны в заголовке правила. Параметры должны изменяться на каждом шаге так, чтобы в итоге либо сработал базис рекурсии, либо условие выхода из рекурсии, размещенное в самом правиле. Общий вид: <имя определяемого предиката>:- [<подцели>], [<условие выхода из рекурсии>], [<подцели>], <имя определяемого предиката>, [<подцели>]. Хвостовая рекурсия: Можно сформулировать условия, при соблюдении которых рекурсия в Prologе становится хвостовой, то есть не расходует стек при неограниченном количестве рекурсивных вызовов: рекурсивный вызов должен быть последней целью в хвостовой части правила вывода; перед рекурсивным вызовом не должно быть точек возврата.
7. Основы программирования на Турбо-Прологе: тип данных "список", работа со списками. Список это упорядоченный набор объектов, следующих друг за другом, произвольной длины. Список задается перечислением элементов списка через запятую в квадратных скобках. Количество элементов в списке называется его длиной. Список, который не содержит ни одного элемента, называется пустым списком. Он обозначается так [ ]. Описание: <имя спискового домена>=<имя домена элементов списка>*. Звездочка после имени домена указывает на то, что описывается список, состоящий из объектов соответствующего типа. Рекурсивное определение списка: Список является рекурсивным составным объектом, состоящим из двух частей. Структура вида [H|T] является списком, если Н голова списка первый элемент списка, а Т - хвост списка все последующие элементы, являющиеся, в свою очередь списком. Так как список является рекурсивной структурой данных, то для работы со списками используется рекурсия. Основной метод обработки списков заключается в следующем: отделить от списка голову, выполнить с ней какие-либо действия и перейти к работе с хвостом списка, являющимся в свою очередь списком. Далее у хвоста списка отделить голову и так далее до тех пор, пока список не останется пустым. В этом случае обработку списка необходимо прекратить. Следовательно, предикаты для работы со списками должны иметь, по крайней мере, два предложения: для пустого списка и для непустого списка.
8. Основы программирования на Турбо-Прологе: тип данных "строки", работа со строками. Под строкой в Прологе понимается последовательность символов, заключенная в двойные кавычки. Строка - это набор символов. Термин "символ" включает буквы английского и русского алфавита, цифры, символы @, $ и некоторые другие. Длина строки не должна превышать 250 символов. Операции, обычно выполняемые над строками, включают: объединение строк для образования новой строки; расщепление строки для создания двух новых строк; поиск символа или подстроки внутри данной строки. Для описания строки используется ключевое слово string. По общепринятым нормам в Прологе создают синоним для типа string и используют его для понятности программы. Встроенные предикаты для работы со строками: str_len(string,integer), concat(string,string,string), frontchar(string,char,string), frontstr(integer,string,string,string), fronttoken(string,string,string), isname(string)
9.1. Основы программирования на Турбо-Прологе: организация ввода, вывода, работа с файлами. Обычно файлом называют именованную (то есть имеющую имя) совокупность данных, записанных на диске. Файл состоит из компонентов (элементов). При чтении или записи файловая переменная перемещается к очередному компоненту и делает его доступным для обработки. Попробуем разобраться с тем, как можно работать с файлами в Прологе. Файлы описываются в разделе описания доменов следующим образом: file = <символическое имя файла1>;...; <символическое имя файлаN>. Обратите внимание, что при описании файловых доменов тип домена file располагается слева от равенства, а символические имена файлов справа. Их еще называют внутренними или логическими именами файлов.
9.2. Основы программирования на Турбо-Прологе: организация ввода, вывода, работа с файлами. Предикат openread открывает файл только для чтения. Предикат openwrite открывает файл только для записи. Предикат openappend открывает файл только для дозаписи в конец файла. Предикат openmodify открывает файл для чтения и записи одновременно. Для того чтобы проверить, существует ли файл с указанным именем в указанном месте, используется предикат existfile. Предикат deletefile удаляет файл, указанный в качестве его единственного параметра. Предикат renamefile изменяет имя файла, указанного в качестве его первого параметра, на имя, указанное в качестве его второго параметра. Предикат disk позволяет задать или узнать текущий диск и/или каталог, в зависимости от того, связан его единственный аргумент или свободен. Предикат eof (сокращение от End Of File "конец файла") успешен, если достигнут конец файла, в противном случае он неуспешен. Для того чтобы узнать текущую позицию чтения или записи в файле, либо для того, чтобы изменить эту позицию, служит предикат filepos.
9.3. Основы программирования на Турбо-Прологе: организация ввода, вывода, работа с файлами. Для записи данных в текущее устройство записи служит уже знакомый нам предикат write, который до этого мы использовали для вывода информации на монитор. Для чтения информации из активного устройства вывода также уже знакомые нам предикаты readln (читает строку), readint (читает целое), readreal (читает вещественное число), readchar (читает символ), readterm (читает терм). Имеется также предикат file_str, который целиком читает символы файла в строку или, наоборот. Предикат filemode. Он позволяет узнать или задать режим доступа к файлу. У этого предиката два параметра. Первый параметр символическое имя файла, второй параметр задает или принимает режим работы с файлом, имя которого указано в первом параметре. Если второй параметр свободен, то он будет означен текущим режимом работы с файлом, а если связан, то указанный режим будет установлен. Второй параметр может принимать одно из двух значений. Значение ноль соответствует двоичному (бинарному) режиму работы с файлом, а значение единица текстовому режиму. В текстовом режиме к строкам добавляются символы возврата каретки и перевода строки. Чаще используется текстовый режим, поскольку при работе в двоичном режиме данные можно записывать только посимвольно.
10. Основы программирования на Турбо-Прологе: создание окон и меню. Предикат makewindow используется для создания окна, его формат: makewindow (номер окна, атрибуты окна, атрибуты рамки, заголовок окна, верхняя строка окна, крайний левый столбец окна, высота окна, ширина окна). Параметр номер окна целое число, идентифицирует окно в программе. Параметр атрибуты окна целое число, определяет цвета символов и фона. Выбрать необходимый цвет символов и цвет фона, затем сложить, соответствующие значения атрибутов. Параметр атрибуты рамки целое число, значение которого определяет рамку окна. Параметр заголовок окна строка, задаваемая в качестве атрибута будет размещена в центре верхней линии рамки окна. Параметр верхняя строка окна целое число, принимающее значение от 0 до 24. Параметр крайний левый столбец окна целое число, принимающее значение от 0 до 79. Параметр высота окна целое число, определяющее количество строк, занимаемые создаваемые окном. Максимально возможное значение - 25. Параметр ширина окна целое число, указывающее число столбцов, занимаемых окном. Максимально возможное значение 80. Если аргументы предиката makewindow являются неозначенными переменными, то им присваиваются значения параметров текущего окна. Предикат shiftwindow используется для смены текущего окна, его формат: shiftwindow_ (Window_ number). Предикат gotowindow используется для быстрого переключения между двумя окнами, которые не перекрываются, его формат: gotowindow_ (Window_number). Предикат cleawindow используется для удаления из текущего окна изображения. Окно и рамка окна не разрушаются. Окно закрашивается соответствующим цветом фона. Предикат не имеет аргументов. Предикат removewindow используется для удаления текущего окна с экрана. Предикат не имеет аргументов. Если за окном находится другое окно, то это окно и его содержимое становится видимым.
11. Основы программирования на Турбо-Прологе: арифметические вычисления и операции сравнения.
Используются четыре арифметических операции (сложение (+), вычитание (-), умножение (*) и деление (/)), а также целочисленное деление (div) и взятие остатка от деления одного целого числа на другое (mod). Для сравнения чисел можно воспользоваться операциями равно (=), не равно (<>), больше (>), больше или равно (>=), меньше (<), меньше или равно (<=). Кроме того, можно использовать обычные математические функции, такие как: логарифмы натуральный (ln) и десятичный (log), квадратный корень (sqrt), модуль (abs), экспонента (exp). Тригонометрические функции: синус (sin), косинус (cos), тангенс (tan), арктангенс (arctan). Величины углов указываются в радианах. Функция trunc отбрасывает дробную часть своего параметра, а функция round округляет вещественное число до ближайшего целого.
12. Основы программирования на Турбо-Прологе: работа с базами данных. На Прологе легко реализуются реляционные базы данных, наиболее распространенные в настоящее время. Любая таблица реляционной базы данных может быть описана соответствующим набором фактов, где каждой записи исходной таблицы будет соответствовать один факт. Каждому полю будет соответствовать аргумент предиката, реализующего таблицу. Турбо Пролог имеет встроенные средства для работы с двумя типами баз данных: внутренними и внешними. Внутренние базы данных так называются потому, что они обрабатываются исключительно в оперативной памяти компьютера, в отличие от внешних баз данных, которые могут обрабатываться на диске или в памяти. Так как внутренние базы данных размещаются в оперативной памяти компьютера, конечно, работать с ними существенно быстрее, чем с внешними. С другой стороны, емкость оперативной памяти, как правило, намного меньше, чем емкость внешней памяти. Внутренняя база данных состоит из фактов, которые можно динамически, в процессе выполнения программы, добавлять в базу данных и удалять из нее, сохранять в файле, загружать факты из файла в базу данных. Описание: DATABASE [ <имя базы данных>]; <имя предиката>(<имя домена первого аргумента>,..., < имя домена n-го аргумента>)
12. Основы программирования на Турбо-Прологе: работа с базами данных. Для добавления фактов во внутреннюю базу данных может использоваться один из трех предикатов assert, asserta или assertz. Разница между ними в том, что предикат asserta добавляет факт в начало внутренней БД, а предикат assertz добавляет факт в конец базы данных. assert добавлен для совместимости с другими версиями Пролога. В качестве первого параметра у этих предикатов указывается добавляемый факт. Для удаления фактов из базы данных служат предикаты retract и retractall. Предикат retract удаляет из внутренней базы данных первый с начала факт. Для удаления всех предикатов, соответствующих его первому аргументу, служит предикат retractall. Для удаления всех фактов из некоторой внутренней базы данных следует вызвать этот предикат, указав ему в качестве первого параметра анонимную переменную. Для сохранения динамической базы на диске служит предикат save. Он сохраняет ее в текстовый файл с именем, которое было указано в качестве первого параметра предиката. Факты, сохраненные в текстовом файле на диске, могут быть загружены в оперативную память командой consult. Первым параметром этого предиката указывается имя текстового файла, из которого нужно загрузить факты.