Uploaded by Дмитрий Северинов

Kursovaya rabota Kireeva2

advertisement
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФГАОУ ВПО «СЕВЕРО-КАВКАЗСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
Институт информационных технологий и телекоммуникаций
Кафедра информатики
КУРСОВАЯ РАБОТА
по дисциплине
«Программирование»
на тему: «Оценка возможностей языков логического программирования»
Выполнила:
Киреева Кристина Дмитриевна
студентка 3 курса группы ПОБ-б-о-17-1
направления педагогическое образование
Очной формы обучения
________________________
(подпись)
Руководитель работы:
Ардеев Александр Халилович
доцент кафедры информатики
(ФИО, должность, кафедра)
Работа допущена к защите ______________________
(подпись руководителя)
______________
(дата)
Работа выполнена и
защищена с оценкой _________________________
Члены комиссии: ________________
(должность)
Дата защиты______________
__________
_______________
(подпись)
(И.О. Фамилия)
________________ _______________
_______________
________________ _______________
_______________
________________ _______________
_______________
Ставрополь, 2020 г.
Содержание
Введение .............................................................................................................................3
1.
Теоретические основы логического программированияОшибка! Закладка не
определена.
1.1 Сущность логического программирования и логических языков ........... Ошибка!
Закладка не определена.
1.2
Особенности изучения логического программирования .... Ошибка! Закладка
не определена.
2. Анализ языков логического программирования .................. Ошибка! Закладка не
определена.
2.1 Специфика языка Пролог ................................ Ошибка! Закладка не определена.
2.2. Возможности языка Пролог ........................... Ошибка! Закладка не определена.
Заключение .......................................................................................................................26
Список использованных источников .............................................................................28
Введение
Актуальность: В XXI веке широкое распространение получили новые
информационные технологии. Появились инновационные решения, которые
были призваны облегчить и качественно улучшить жизнь общества. Ни для
кого не секрет, что эти технологии стали массово внедряться в
образовательный процесс как нашей страны, так и всего мира. Несмотря на
разный уровень образованности, культур, возможностей, у всех учащихся есть
потребность в личностно-ориентированном подходе. Этот социальный заказ
претворил
в
жизнь
идею
применения
интерактивных
методов
в
образовательном процессе. Опираясь на эту проблему, в своей работе я
раскрою
тему:
«Оценка
возможностей
языков
логического
программирования».
Объект: языки программирования.
Предмет
исследования
–
особенности
логических
языков
возможностей
языков
программирования.
Цель
исследования:
провести
анализ
логического программирования.
Задачи:
 Определить сущность логического программирования;
 Провести анализ назначения логических языков.
 Рассмотреть
специфику
языка
логического
программирования
Пролог.
Практическая значимость: на данный момент логические языки и
элементы
логической
парадигмы
в
программировании
встречаются
повсеместно, что актуализирует проблемы выбора оптимального языка для
тех или иных задач.
1. Теоретические основы логического программирования
1.1. Сущность логического программирования и логических языков
Традиционные языки программирования основываются на структуре
компьютера и командах, которые может выполнить компьютер,
поэтому человек должен обучаться алгоритмическому мышлению.
Логическое программирование исходит из того, что компьютер
должен уметь работать по логическим построениям, присущим человеку.
Например, в логическом программировании разрешена конструкция типа
«Определить главную причину снижения студенческой успеваемости».
Данной конструкции достаточно, чтобы получить ответ.
Логическое программирование – это подход к программированию, при
котором программа задается совокупностью правил без явного указания
последовательности их применения.
Под логическим программированием обычно подразумевают идею
использования для создания программного обеспечения логики предикатов, в
частности рассуждений, которые показывают путь к достижению желаемого
результата.
Предложение естественного языка без труда может быть преобразовано
в предложение логики предикатов. Для этого следует сначала устранить все
ненужные слова из предложения, после чего преобразовать предложение так,
чтобы свойство или отношение стояло первым, а обладающие данным
свойством
или
находящиеся
в
данном
отношении
объекты
были
сгруппированы после него. Тогда объекты становятся параметрами, на
которых это свойство или отношение действует.
В табл.1 предложения естественного языка преобразованы в синтаксис
логики предикатов.
Таблица 1 Преобразование предложений естественного языка
Естественный язык
Роза красная.
Монополия – игра.
Ане нравится монополия,
если монополия – игра.
Логика предикатов
красная (роза).
игра (монополия).
нравится (аня, монополия)
if игра (монополия).
У языков логического программирования два главных отличия от
классических алгоритмических языков:
-Это символьное программирование. Данные в нем суть символы,
представляющие только самих себя и не подлежащие интерпретации при
выполнении программы.
-Алгоритмы получения определенных результатов непосредственно
не задаются, но описываются объекты, их свойства и отношения.
Одной
из
главных
предпосылок
развития
логического
программирования явилось существование большого и очень важного класса
неформализованных
задач.
К
неформализованным,
или
плохо
структурированным (ill structured) относят такие задачи, которые обладают
одной или несколькими из следующих характеристик:
• Задачи не могут быть заданы в числовой форме (данные представлены
в символьном виде).
• Не существует точного метода решения.
• Есть возможность выбора, но нет алгоритмического решения.
• Противоречивость исходных данных и знаний о предметной области.
К предпосылкам появления и развития логического программирования
можно отнести следующие недостатки традиционного подхода:
Некоторые понятия плохо формализуются с помощью
алгоритмов.
Не все виды понятий можно представить программой.
Некоторые понятия и отдельные запросы определены частично
или не полностью.
Программы теряют способность к модификации с увеличением
их размеров.
Программы не могут определять или доопределять понятия.
Программы выводят только запланированные результаты и/или
обрабатывают ошибочные ситуации, но альтернативные решения не
предусматриваются.
Решение каждой из этих проблем требует перепрограммирования, что
по стоимости часто равносильно созданию новых программ. Поэтому
логическое программирование представляет интерес иной подход (в отличие
от традиционного) к решению запросов пользователя.
Логическое программирование позволяет учитывать главную проблему
– использование компьютера силами самого пользователя, не обладающего
знаниями в области программирования, но хорошо ориентирующегося в
своих
прикладных
областях,
и
владеющего
профессиональными
специфическими знаниями.
Логическое программирование учитывает также и возможности,
присущие традиционному процедурному программированию.
Одним из самых знаменитых языков логического программирования
является
Пролог,
название
которого
произошло
от
словосочетания
ПРОграммирование при помощи ЛОГики (PROgramming in LOGic).
В настоящее время Пролог – язык, предназначенный для создания
приложений, использующих методы и средства искусственного интеллекта, и
для создания экспертных систем.
Среди отцов Пролога называют ведущих ученых: А. Колмероэ, Дж.
Робинсона и Р. Ковальски.
Алан Колмероэ – непосредственно автор Пролога как языка. В 1971 году
в «Группе искусственного интеллекта» Марсельского университета во
Франции родился Пролог. Главной задачей группы было создание программ
для перевода с естественного языка. А. Колмероэ решил использовать для
задач понимания и анализа естественного языка две области науки:
логику предикатов первого порядка;
методику автоматического доказательства теорем.
Суть языка в том, чтобы основываясь на определенных отношениях
между объектами, путем логического вывода доказать истинность (или
ложность) других отношений.
Первое время (в начале 70-х годов ХХ века) Пролог был не очень
популярен, он пребывал в некоем забвении, вызванном отсутствием
хороших реализаций, и был известен в основном в университетских кругах
Франции.
Вторым столпом называют Робинсона Дж., предложившего метод
резолюций для поиска решений. Коротко можно сказать об этом методе
следующее: получается ответ «НЕТ», если невозможно найти ответ «ДА».
Третьим патриархом логического программирования стал Роберт
Ковальски из шотландского университета в Эдинбурге. Основные заслуги Р.
Ковальски: состоят в следующем:
-он первый подвел стройную математическую и логическую базу под
язык;
-разработал формальную семантику языка;
-явился первым и наиболее энергичным популяризатором языка на
конгрессах, конференциях, в литературе и т.п.
Математическая модель языка Пролог основана на теории исчисления
предикатов, в частности, на процедурной интерпретации дизъюнктов Хорна.
Модель в алгоритмическом (машинно-ориентированном) виде выразил
Маартен ван Эмден – коллега Р. Ковальски.
Первый интерпретатор Пролога был написан Ф. Русселом в 1973 году
в лаборатории А. Колмероэ. Однако первой эффективной и реальной (т.е.
коммерческой) реализацией языка является так называемая эдинбургская
версия Дэвида Уоррена для машин класса DEC-10.
Можно выделить три фактора, позволивших Прологу в начале 80-х
годов ХХ века выйти на мировую арену вычислительной техники из
университетского подполья:
Заинтересованность фирмы DEC в реализации нового языка, и
появление первой коммерческой версии.
Математическое обоснование логического базиса языка.
Объявление языка Пролог в качестве базового в японском
проекте создания вычислительных систем 5-го поколения под названием
FGCS (Fifth Generation Computer Systems).
Японский проект, рассчитанный на десять лет, стартовал в апреле
1982 года под эгидой Токийской международной конференции. Разработка
проекта осуществлялась в исследовательском центре ICOT (The Institute for
New Generation Computer Technology) Токийского института нового
поколения вычислительной техники под руководством Кацухиро Фучи.
Проект был завершен в марте 1993 года.
Цель проекта – выполнение основных исследований по разработке
новой технологии компьютеров, обусловленных необходимостью создания
настолько совершенных машин, чтобы с ними легко могли работать самые
широкие
круги
пользователей.
Такие
машины
должны
обладать
способностями к приобретению знаний, самообучению, рассуждениям и
решению задач. Взаимодействие машин с человеком должно быть
ориентировано на человека.
Японцы
коммерческой
изначально
открыто
заявили,
что
FGCS
не
носит
направленности, и результатом его будет не какой-то
конкретный программный продукт, а новые компьютерные технологии.
Проект создания вычислительных систем 5-го поколения был чисто
исследовательским, более того фундаментальным.
По мнению
разработчиков проекта, логическое программирование
способно стать связующим звеном, позволяющим с единых позиций
взглянуть
на
современные
тенденции
развития
по
следующим
направлениям:
-программирование,
-системы баз данных,
-архитектура компьютеров,
- искусственный интеллект.
Согласно проекту, основной архитектурной единицей вычислительной
системы должна была быть машина логического вывода с языком логического
программирования KL1 (расширенный Пролог) в качестве машинного. На
первом этапе – последовательная персональная машина логического
вывода, затем – параллельная система (от 256 до 1024 процессоров).
Все
прикладные
системы,
написанные
на KL1,
работают
со
скоростью, почти линейно пропорциональной числу процессоров (два
процессора – в два раза быстрее, четыре процессора – в четыре раза быстрее
и т.д.). Например, решатель теорем работает на машине с 256 процессорами в
220 раз быстрее, чем на однопроцессорном компьютере! До сих пор подобного
соотношения на компьютерах, созданных в США и Европе, удавалось
добиваться только для единичных приложений, создаваемых специально под
конкретную архитектуру. Реальный выигрыш во времени (ускорение
выполнения программы) для неяпонских параллельных компьютеров обычно
составляет для 300-процессорноых машин – до 30 раз, для машин с числом
процессоров более тысячи – до 250 раз.
В середине 1995 года в связи с завершением FGCS был отобран ряд
наиболее перспективных направлений, которые относятся как к чисто
научным исследованиям, так и к конкретным прикладным задачам. Эти
направления
развиваются
в
стенах
японского
НИИ
современных
информационных технологий AITEC (Research Institute for Advanced
Information Technology). Наиболее перспективными признаны следующие
области логического программирования:
-технологии интеллектуальной параллельной обработки знаний, языки
баз знаний на основе Пролог-подобных систем,
-решатели интеллектуальных задач,
-программы анализа и обработки естественных языков, базы знаний по
биологии.
Базовая идея, лежащая в основе японского проекта – создание
высокоэффективных компьютерных средств обработки знаний. Понятие
знание японскими специалистами в компьютерном контексте трактуется как
«формализованная
информация,
которую используют
и
на
которую
ссылаются в процессе логического вывода».
Компьютерные знания в логическом программировании принято делить
на факты, описывающие окружающий мир, и на правила, которые позволяют
программе принимать различные решения в процессе логического вывода.
1.2. Особенности изучения логического программирования
Современное развитие общества и информационных технологий
приводит к желанию и
возможности ставить и решать все более сложные и разнообразные
задачи в совершенно разных областях деятельности человека. Причем задачи
и методы их решения становятся все более интеллектуальными, требуют
обработки больших, сложно организованных и сложно структурированных
массивов
информации.
Зачастую
требуется
обрабатывать
плохо
структурированную, неструктурированную или меняющуюся в режиме
реального
времени
необходимым
анализ
информацию.
структуры
В
такой
информации,
ситуации
оказывается
семантический
анализ
текстовой, графической, аудио или видеоинформации.
Решение подобных задач часто требует использования динамических
баз данных, экспертных систем, символьных вычислений, естественноязыковых интерфейсов и других интеллектуальных систем, работающих на
основе системы знаний, часто при этом требуется, чтобы система обладала
возможностями самообучения. Все выше сказанное доказывает повышение
интереса к методологиям функционального и логического программирования.
Совершенно очевидно, что это повышает требования к качеству обучения
логическому программированию.
Классификация языков программирования по их близости либо к
машинным языкам, либо к естественному человеческому языку — язык
высокого уровня, позволяет выделить языки логического программирования,
в группу языков сверхвысокого уровня, поскольку они очень близки к
человеческому мышлению и человеческому языку.
Языки логического программирования поддерживают декларативный
стиль программирования, при котором программа представляет собой не
последовательность операторов, определяющих пошаговое преобразование
исходных
данных
—
императивный
совокупность
утверждений
совокупность
объектов,
—
стиль
деклараций,
взаимосвязь
программирования,
описывающих
объектов,
ситуации,
а
объекты,
возможные
состояния предметной области и так далее [3]. Таким образом, в основе
логической программы лежит формализованная человеческая логика. Человек
описывает предметную область, ее часть или задачу, используя минимальный
набор синтаксических конструкций. В результате может быть обеспечена
высокая скорость разработки приложений, значительно меньший размер
исходного кода, более понятные, по сравнению с императивными языками,
программы.
Логическое программирование основано на логике первого порядка или
логике предикатов [1]. Язык логики предикатов — формальный язык,
наиболее приближенный к человеческому языку, алфавит которого включает:
переменные, константы, функциональные
или предикатные символы,
пропозициональные константы истина и ложь, логические связки, кванторы и
вспомогательные символы [2, 15c]. Базовой синтаксической конструкцией
логического языка программирования является терм. Терм в логическом
программировании это: константа, переменная или составной терм [1-4].
Используя термы, можно строить предложения, из которых и состоит
программа — база знаний. Предложения базы знаний могут быть всего двух
видов: факты и правила, причем факт является неполной формой правила,
то есть частным случаем правила [4]. Кроме этого используются вопросы —
запросы к базе знаний, представляющие собой конъюнкцию или дизъюнкцию
термов. Таким образом, изучение собственно синтаксиса конкретного языка
логического программирования не вызывает каких бы то ни было проблем.
Используя факты и правила, с помощью которых фиксируются
отношения между объектами реальной предметной области — знания об этих
отношениях и объектах, можно строить более сложные описания предметной
области — более сложные знания. Такой способ построения программы
согласуется с принципом структуризации знаний, в соответствии с которым
более сложные знания базируются на более простых, вплоть до элементарных.
Более сложные описания (декларации) знаний называются процедурами.
Следует отметить, что с точки зрения логического программирования,
порядок следования деклараций — описаний предметной области не существен
[3]. Однако реализация программы происходит на технике, работающей по
императивному принципу — в строгом порядке по отдельным шагам. Этот
факт
необходимо
учитывать
для
обеспечения
работоспособности и
эффективности логической программы.
Изучение
логического
программирования
и
языка
логического
программирования Prolog обычно происходит на третьем курсе бакалавриата.
Опыт показывает, что при этом студенты уже имеют значительную практику,
а значит привычки и штампы программирования на императивных языках
программирования. В этом заключается одна из сложностей обучения
логическому программированию. Кроме этого необходимо научить студента
описывать предметную область, устанавливая и декларируя взаимосвязи и
зависимости между объектами предметной области максимально эффективно.
При этом требуется формализация таких описаний, опыта которого студент не
имеет.
Предлагается следующая последовательность изложения материала и
последовательность
программирования
формирования
у
студента.
знаний
и
Первоначально
умений
логического
прививаются
навыки
выполнения деклараций на более конкретном уровне и выполнение
поисковых задач по простым, а потом и более сложным запросам. Далее
требуется выполнять описания предметной области в более обобщенной
форме, с использованием именованных и безымянных переменных, при этом
демонстрируется возможность получения одного или большего количества
вариантов решения и формы решений. При этом необходимо добиваться
понимания
студентом
способа
и
порядка
формирования
решения,
возможности появле6ния тупиковых ситуаций и способов выхода из них.
Постепенно усложняются постановки задач, добавляются декларации с
вариантными частями или характеристиками. Так, например,
нашим
студентам предлагается задача обработки информации о собственниках,
владеющих разными видами собственности, с разными наборами по
количеству и по характеристикам этой собственности. Такие требования
приводят к пониманию необходимости использовать понятие домена и
вариантного домена. Позже предъявляются требования использования ранее
сделанных деклараций и ссылки на них.
Таким образом постепенно формируются навыки описания сложной
предметной области. Постепенно задания на лабораторные работы от
абстрактных постановок переводятся в более практическую сферу, что, как
показала практика, повышает интерес студентов к дисциплине. Опыт показал,
что
такое
последовательное
усложнение
изучаемого
материала,
с
использованием ссылок на ранее выполненные задания привело к более
прочному усвоению материала студентами и , как следствие, к повышению
их успеваемости. Кроме того, ряд заданий перерастает, в более сложных
постановках, в задания на курсовые работы и дипломное проектирование,
повышая актуальность данной дисциплины.
.
2. Анализ языков логического программирования
2.1. Специфика языка Пролог
Пролог
является
декларативным
языком.
Программист
задает
необходимые факты и правила, а Пролог использует дедуктивный вывод для
решения
задачи.
Программист
имеет
возможность
заниматься
непосредственно задачей, а не поиском способа разделения ее решения на
небольшие
шаги.
Такой
метод
представляет
собой
полную
противоположность программированию на каком-либо процедурном языке,
где решение разбивается на дискретные шаги и их последовательное
описание.
Единственным методом программирования на Прологе является
рекурсия. В сущности, после завершения работы программы на Прологе
(доказательства цели) могут возникнуть только два состояния: доказано, не
доказано. Иногда они называются соответственно истинно и ложно.
Необходимо
научиться
формулировать логические
соотношения,
описывающие задачу, а Пролог-система выполнит все необходимые действия.
Есть две основные абстракции логического программирования:

Отказ от таких операторов, как хорошо известные операторы цикла
и условные операторы. Вместо них мощный механизм управления, который
единообразно применяется во всей программе. Механизм основан на
понятии
доказательства
рассматривается
как
набор
в
математической
логических
формул
логике:
программа
(аксиом),
которые
предполагаются истинными, а вычисление – как попытка доказать формулу
(теорему) на основе аксиом программы.
Не используются операторы присваивания и явные указатели. Вместо
этого для создания и декомпозиции структур данных
обобщенный механизм сопоставления с образцом.
используется
Основным компонентом пролог-программы является предложение,
которое может быть фактом, правилом или целью. В табл. 2 приведены
примеры предложений, из которых строится логическая программа.
Таблица 2 Предложения программы на языке Пролог
Предложение
факт
правило
цель
Пролог
студент (иван).
ходит (X, лекция) if
студент (X).
ходит (иван, лекция).
Естественный язык
Иван является студентом
Если X студент,
то X ходит на лекцию
Иван ходит на лекцию?
иван – конкретный объект, X – абстрактный объект.
Пример 2-1. Простейшая пролог-программа.
predicates
nondeterm нравится (symbol, symbol) clauses
нравится (лена, теннис). нравится (петя, футбол). нравится (коля, баскетбол).
нравится (женя, плавание). нравится (марк, теннис).
% Егору нравится то же, что и Коле.
нравится (егор, X) if нравится (коля, X).
goal нравится (егор, баскетбол). % Нравится Егору баскетбол?
Любая программа на Прологе состоит из пяти секций или разделов,
некоторые из которых могут быть опущены. В Примере 1 используются три
из них, обозначенные ключевыми словами predicates, clauses, goal.
Секция clauses (пролог-предложения или клозы) содержит набор фактов
и правил. Среди фактов нет информации о том, что нравится ли Егору
баскетбол. Тем не менее, этот вопрос можно задать системе в виде цели
goal. На ввод этой цели будет получен результат yes.
Для получения ответа система использует один факт и одно правило:
нравится (коля, баскетбол).
нравится (егор, X) if нравится (коля, X).
Предложение (1) – факт, где в отношении нравится участвуют два
конкретных объекта коля и баскетбол.
Предложение (2) – правило, которое отличается от факта наличием
абстрактного объекта X и некоторого условия, от выполнения которого
зависит истинность этого правила.
Если заменить целевое утверждение другим:
goal нравится (егор, плавание).
Будет получен результат no. Этот ответ не означает, что Егору не
нравится плавание. Ответ no означает, что системе не известен факт любви
Коли к плаванию.
Ответ yes на последнюю цель можно получить, если: добавить факт
нравится (коля, плавание).
или добавить факт нравится (егор, плавание).
Таким образом, программа на Прологе описывает объекты и их связи,
а затем описывает правила, при которых связи являются истинными.
2.2 Возможности языка Пролог
Пролог-программа состоит из предложений трех типов: факты, правила
и цели. Каждое предложение заканчивается точкой.
Факт – это утверждение, которое всегда является истинным без
всякого условия.
В фактах используются только объекты–константы.
Правило – это утверждение, истинность которого доказывается в
зависимости от заданного условия.
Правило позволяет выводить один элемент информации из другого
благодаря наличию в нем переменных. Правило успешно, только если
достижимы заданные в теле правила цели, иначе правило терпит неудачу.
Цель – это утверждение, которое задают как вопрос относительно
фактов и правил.
В целях применяются переменные, а также константы.
Любая программа состоит секций (табл. 3), которые обозначаются
ключевыми словами domains, facts, database, predicates, goal, clauses. При
отсутствии секций predicates, goal и clauses Прологсистема не будет
выполнять программу. Остальные секции могут быть опущены.
Таблица 3 Секции Пролог-программы
Ключевое
слово
domains
facts
database
goal
predicates
clauses
Назначение
Пояснения
Описание
доменов
Содержит объявления различных классов используемых
в программе объектов.
Содержит
объявления
недетерминированных
Описание
предикатов, представленных в программе фактами.
фактов
Такие предикаты можно объявлять и в секции
predicates, тогда секции facts не будет.
Описание
Содержит объявления предикатов динамической базы
предикатов ДБД данных (ДБД). Если программа не требует ДБД, то
секция может быть опущена.
Целевое
Является обязательной секцией.
утверждение
Содержит формулировку назначения программы в
виде цели. Цель должна быть только одна.
Является обязательной секцией.
Описание
Содержит объявления используемых программой
отношений
предикатов (фактов, правил). По умолчанию все
(кроме ДБД)
предикаты считаются детерминированными. Если
предикат порождает множество решений, то перед его
именем следует указать ключевое слово nondeterm.
Утверждения
Является обязательной секцией.
Содержит известные априорно факты и правила,
которые являются необходимыми данными для работы
программы.
Предложения группируются по именам предикатов.
Порядок следования предложений неважен, но
зачастую влияет на процесс поиска решения.
Факты, объявленные в секции predicates (но не в секции
facts) рассматриваются как статическая база данных.
Константа обозначает конкретный объект и определяет одну
конкретную сущность предметной области.
Константа в Прологе может быть числом или атомом.
Атом
–
последовательность
заключенных
символов или
последовательность
букв,
цифр
в
и
кавычки
символов
подчеркивания, которая начинается со строчной буквы. Атомы без
кавычек не могут содержать пробелов.
Примеры констант:
17 2.5 "Daniel H. Marcellus" logic "Санкт-Петербург"
Понятие переменной в логическом программировании отличается от
принятого
в традиционных языках программирования. В частности,
переменная не рассматривается как выделенный участок памяти, которому
присвоено имя. В программе переменная обозначается последовательностью
символов, которая начинается с прописной буквы.
Переменная обозначает неопределённый (но единственный
объект) и служит для обозначения объекта, на который нельзя сослаться
по имени.
Переменная может быть свободной, связанной и анонимной.
Свободная переменная – это переменная, значение которой не известно.
Связанная переменная – это переменная, получившая значение в
процессе логического вывода.
Начинается переменная с прописной буквы или символа
подчеркивания, например,
What Who Что X _X _x _кто
Процесс получения значения переменной называется конкретизацией.
Анонимная переменная – это переменная, используемая для
игнорирования значения, в котором нет нужды.
Анонимная переменная может использоваться вместо любой другой
переменной. Она соответствует чему-нибудь. Анонимная переменная никогда
не будет связываться с конкретным значением. В программе такая переменная
обозначается символом подчеркивания.
Объекты логического программирования представляют собой элементы
предметной области и могут быть:
конкретными объектами (атомами), абстрактными объектами
(переменными).
Объекты взаимодействуют друг с другом, то есть, между ними
существует связь, которая их объединяет.
Набор однотипных связей между объектами называют отношением.
В Примере 1 два объекта марк и теннис взаимодействуют в отношении
нравится:
нравится
марк
теннис
Конкретный объект обладает вполне определенным свойством или
свойствами. В логических программах не существует различий между
отношением и свойством. Термин отношение применяется и к свойствам
тоже.
Объекты с отношениями являются неотъемлемой частью данных и
образуют утверждения предметной области. На первом месте в утверждении
указывается имя отношения, а в скобках через запятую – объекты
отношения. В конце обязательно ставится точка.
Примеры утверждений:
car (mercedes, blue). red (nose).
likes (tom, ann). plus (3, 2, 5).
girl (mary). run.
Очевидно, что утверждение может содержать разное количество
объектов. Для обозначения числа объектов утверждения введен термин
арность.
Утверждения car и likes двух-арные, red и girl – одно-арные, plus –
трех-арное, run – ноль-арное.
Запись отношения позиционно зависимая, т. е. plus (3, 2, 5). НЕ РАВНО
plus (5, 3, 2).
В общем виде факты имеют следующий формат:
relation (object1, object2, ..., objectN) . property (object1, object2, ...,
objectN) . property (object1) .
, где objectj – объекты, связанные отношением relation или свойством
property. Примеры фактов:
isA (susan, horse). eats (bill, apple).
power (knowlege). car (mercedes, blue, berlin).
Интуитивно понятно, что каждое отношение имеет некоторую
интерпретацию. Например, известно:
Студенческая практика имеет определенное название (Имя) и
проводится
на определенном
курсе (Курс),
кроме
того,
нет
двух
студенческих практик с одинаковыми названиями.
Для отношения назначитьПрактику между объектами Имя и Курс
могут существовать следующие интерпретации:
назначитьПрактику (учебная, 1).
назначитьПрактику (производственная, 3).
назначитьПрактику (исследовательская, 4).
Формально, предложенные утверждения – это пример функции
значения истинности аргументов (в данном случае двух аргументов).
Предикат – это логическая функция истинности, которая для
некоторого аргумента возвращает значение истинно или ложно.
Предикат, содержащий n аргументов, называется n-арным (-местным)
предикатом.
Подстановка значений аргументов
предиката эквивалентна вызову
функции, а значит, получению высказывания, которое может быть истиной
либо ложью.
Так, при подстановке Имя = производственная и Курс = 3
получается истинное высказывание
назначитьПрактику (производственная, 3).
При подстановке Имя = исследовательская и Курс = 3
получается ложное высказывание
назначитьПрактику (исследовательская, 3).
Последнее высказывание ложно, потому что на третьем курсе
студенты проходят не исследовательскую, а производственную практику.
Символическое имя отношения называется именем предиката.
Объекты,
которые
связаны
отношением,
называются
его
параметрами.
Предикат в Прологе – это символическое имя отношения и
последовательность параметров.
Например, в факте eats (ted, apple).
отношение eats – предикат, а объекты ted и apple – параметры.
Все предикаты, используемые в программе, должны быть объявлены
согласно формату следующего вида:
PredicateName (argType1, argType2, …, argTypeN)
, где PredicateName – имя предиката,
argTypej – тип аргумента.
Следует обратить внимание, что в конце точка не ставится, и
параметры предиката в секции predicates не являются объектами, а
представляют собой типы объектов, входящих в предикат.
Для того чтобы задать системе вид предиката и его арность, в
программе используется секция predicates. Например:
predicates
eats (symbol, symbol)
Предикаты,
определенные
стандартными
типами
объектов,
называются типовыми.
Пролог имеет шесть встроенных типов объектов, которые представлены
в табл. 4.
Таблица 4 Встроенные типы объектов
№
Ключевое слово Тип
Пояснения
1
char
Символы
'a'
2
integer
Целые числа
-32768
32767
3
real
Действительные
числа
1E-307
1E308
4
string
Строки
Последовательность символов между
длиной менее или равной 250 символов
5
symbol
Символические
имена
Атом
6
file
Файлы
Допустимое имя файла: data.dba, mail.txt
'%'
'\n'
"
"
Аналогично типу string
Определение типов происходит в специальной секции программы
domains. Формат объявления объектов:
domainName1, domainName2, …, domainNameN = type
, где domainNamej – доменные имена типов объектов,
type – стандартный встроенный тип объектов.
Пример 2-2. Использования в программе объектов разных типов.
domains
brand, color = symbol age = integer mileage = real
predicates
car (brand, mileage, age, color)
Использование
логической
доменных
программе
имен
наиболее
при
объявлении
предпочтительно
в
предикатов
в
сравнении
с
использованием стандартных встроенных типов объектов.
•
Цели
Вопрос, который задают относительно фактов или правил
прологпрограммы, называют целевыми утверждениями, или просто целями.
Цели задаются в секции goal.
Различаются простые и сложные цели. Простая цель состоит из
одного
предложения. Сложная цель – из нескольких предложений,
соединенных логической операцией конъюнкция.
В конце целевого предложения обязательно ставится точка.
В зависимости от используемых объектов различают варианты целей:
• Простая цель с константами.
• Простая цель с переменными.
• Сложная цель.
• Цель с анонимными переменными.
Разные цели исследуются на примере следующей программы:
domains
brand, color = symbol
age = integer mileage = real predicates
car (brand, mileage, age, color) clauses
car (volvo, 13000, 3, red).
car (ford, 9000, 4, gray).
car (datsun, 8000, 1, red).
В качестве цели задан предикат, все параметры которого
представлены константами.
Основной результат работы программы – подтвердить или не
подтвердить истинность указанного в целевой секции предиката.
goal car (ford, 9000, 4, gray). yes
goal car (volvo, 9000, 4, gray). no
В качестве цели подставлен предикат, в котором есть переменные.
Пролог-система будет стараться найти все такие значения
переменных, при которых целевой предикат становится истинным.
goal car (volvo, 13000, Age, Color). Age = 3 Color = red
1 Solution
goal car (Brand, Mile, Age, red).
Brand = volvo Mile = 13000 Age = 3 Brand = datsun Mile = 8000 Age = 1 2 Solutions
Целевое утверждение состоит из двух или более частей, называемых
подцелями. Подцели соединяются, как правило, логической связкой И.
В этом случае Пролог будет искать все такие значения переменных,
при которых все подцели будут истинными.
goal
% Есть ли автомобили возрастом меньше 4 лет?
car (Type, Odometer, YearOnRoad, Color) and YearOnRoad < 4. Type = volvo
Odometer = 13000 YearOnRoad = 3 Color = red Type = datsun Odometer = 8000
YearOnRoad = 1 Color = red 2 Solutions
2.7.4. Цель с анонимными переменными
Если необходимо скрыть какую-либо информацию в запросе, то
следует воспользоваться анонимной переменной.
Анонимная переменная используется для игнорирования значения, в
котором нет нужды.
В
Прологе
анонимная
переменная
обозначается
символом
подчеркивания.
goal
% Каковы марки и возраст автомобилей, находящихся на дорогах < 4 лет?
car ( Type, _, YearOnRoad, _ ) and YearOnRoad < 4.
Type = volvo YearOnRoad = 3 Type = datsun YearOnRoad = 1 2 Solutions
Пример лабораторной работы № 1 приведён в [29].
Многострочные комментарии записываются в программе аналогично
языку программирования C:
/* Многострочный комментарий */
Однострочный комментарий начинается с символа процент:
% Однострочный комментарий
Для обеспечения более легкого чтения текстов программ, следующие
слова и символы являются попарно заменяемыми:
if
эквивалентно
:
(двоеточие и
an
эквивалентно–
,минус)(запятая)
d
Таким образом, два следующих фрагмента идентичны:
isOlder (P1, P2) if
age (P1, Age1) and age (P2, Age2) and Age1 > Age2.
isOlder (P1, P2) :–
age (P1, Age1),
age (P2, Age2), Age1 > Age2.
Все предложения, представляющие факты и правила, обязательно
заканчиваются символом точка.
Возможно описание нескольких правил для одного и того же
предиката, что соответствует логической связке OR (ИЛИ).
Заключение
Любой язык программирования всегда ориентирован на определенный
круг задач, при решении которых он наиболее эффективен. Для языка Prolog
типичными
являются
проекты,
связанные
с
разработкой
систем
искусственного интеллекта — это различные экспертные системы, системы
планирования, программы-переводчики, интеллектуальные игры и т.п. Prolog
обладает достаточно мощными средствами, позволяющими извлекать
информацию из баз данных и знаний. При этом его методы поиска
принципиально отличаются от "традиционных". Кроме этого, Prolog часто
используют в задачах, связанных с манипулированием на естественном
языке.
Интерес к Prolog поднимался и затихал несколько раз, энтузиазм
сменялся жёстким неприятием. Наиболее высокий интерес к языку Prolog, как
к языку будущего, возник в 1980-х годах во время разработки японской
национальной программы «компьютеры пятого поколения». В рамках этого
проекта разработчики надеялись, что с помощью Prolog можно будет
сформулировать
новые
принципы,
которые
приведут
к
созданию
компьютеров более высокого уровня интеллекта.
Эта надежда базировалось на том, что логическое программирование
использует не последовательность абстракций и преобразований, которая
отталкивается от машинной архитектуры фон Неймана и присущего ей
набора операций, а на основе абстрактной модели, которая никак не связана с
каким-либо типом машинной модели. Из этого подхода следовало, что не
человека надо обучать мышлению в терминах операций компьютера, а
компьютер должен выполнять инструкции, свойственные человеку. И на
этом историческом этапе некоторые ученые и инженеры считали подобный
путь простым и эффективным.
Prolog – язык программирования, который основан не на алгоритме, а
на логике предикатов. Если программа на алгоритмическом (процедурном)
языке
является
последовательностью
инструкций,
выполняющихся
в
заданном порядке, то Prolog, будучи декларативным языком, содержит только
описание задачи, а Prolog-машина выполняет поиск решения, руковод ствуясь
только этим описанием и используя механизм поиска с возвратом и
унификацию.
Список использованных источников
1.
А.Н. Адаменко, А.М. Кучуков. Логическое программирование и
Visual Prolog. СПб.: БХВ-Петербург, 2003. 992с.
2.
Братко И. Программирование на языке пролог для искусственного
интеллекта. М.: Мир, 1990.273с.
3.
Братко, Иван. Алгоритмы искусственного интеллекта на языке
PROLOG, 3-е издание. : Пер. с англ. — М. : Издательский дом «Вильяме»,
2004. — 640 с. :
4.
Борщев В.Б. Пролог — основные идеи и конструкции. В кн.:
Прикладная информатика. Сб. Статей под ред. В.М. Савинкова. М.: Финансы
и статистика, 1986. С. 49-76.
5.
Ин Ц., Соломон Д. Использование Турбо-Пролога. – М.: Мир, 1993
6.
Марселлус
Д.
Программирование
экспертных
систем
на
ТурбоПрологе – М.: Финансы и статистика, 1994
7.
Основы программирования на языке Пролог: курс лекций: учеб.
пособие для студентов вузов, обучающихся по специальностям в обл. информ.
Технологий / П.А. Шрайнер. М.: Инернет-Ун-т Информ. технологий. 2005. 176
с. (Серия «Основы информационных технологий» / Интернет-Ун-т информ.
технологий).ISBN 5-9556-0034-5.
8.
Стерлинг Л., Шапиро Э. Искусство программирования на языке
Пролог. – М.: Мир, 1990.
9.
Шрайнер П.А. Основы программирования на языке Пролог. Курс
лекций. – ИНТУИТ, 2005. – 176 с.
10.
Цуканова Н.И., Дмитриева Т.А. Теория и практика логического
программирования на языке Visual Prolog 7.Учебное пособие для вузов. – М.:
Горячая Линия – Телеком, 2013. – 232 с.
11.
доступа:
Язык программирования Prolog [Электронный ресурс]. – Режим
открытый
ресурс;
постоянный
http://it.kgsu.ru/Prolog/oglav.html – Загл. с экрана.
адрес
в
Интернет:
–
12.
Visual Prolog. Техническая, справочная и обучающая информация
от разработчиков (рус.) [Электронный ресурс]. – Режим доступа: открытый
ресурс;
постоянный
адрес
в
Интернет:
–
http:://wikiru.visual-
prolog.com/index.php
13.
Costa Eduardo. Visual Prolog для чайников [Электронный ресурс].
– Режим доступа: открытый ресурс; постоянный адрес в Интернет:
http://wikiru.visual-prolog.com /index.php?title=Visual_Prolog_for_Tyros – Загл.
с экрана
14.
Thomas W. De Boer. A Beginners' Guide to Visual Prolog 7.2
[Электронный ресурс]. – Режим доступа: открытый ресурс; постоянный адрес
в
Интернет:
–
http://download.pdc.dk/vip/72/books
/deBoer
/VisualPrologBeginners.pdf – Загл. с экрана.
15.
доступа:
SWI-Prolog documentation [Электронный ресурс]. – Режим
открытый
ресурс;
постоянный
адрес
в
Интернет:
–
http://www.swiprolog.org/pldoc/index.html – Загл. с экрана.
16.
Wielemaker Jan, Anjewierden Anjo. Programming in XPCE/Prolog
[Электронный ресурс]. – Режим доступа: открытый ресурс; постоянный адрес
в Интернет: http://www.swi-prolog.org/packages/ xpce/UserGuide/ – Загл. с
экрана.
Зав. кафедрой
Информатики
Кандидату педагогических наук
Доценту кафедры информатики
Панкратовой О.П.________
(уч. степень, уч. звание,Ф.И.О)
студента ПОБ-б-о-17-1 гр. 3 курса
_Гагиева М.М.___ (Ф.И.О.)
ЗАЯВЛЕНИЕ
Я,____________________Гагиев М.М.____________________________________________
(Ф.И.О. студента)
прошу утвердить тему курсовой работы: Разработка приложения «Интерактивный
кроссворд» ___________________________________________________________________
(название темы курсовой работы)
и назначить научным руководителем кандидата педагогических наук доцента кафедры
информатики ___________Ардеева А.Х.___________________________________________
(Ф.И.О., уч. степень, уч. звание предполагаемого научного руководителя)
Дата:
___________ (подпись)
Согласовано:
____________________________
(подпись научного руководителя)
Download