Автор работы: Пользователь скрыл имя, 15 Февраля 2013 в 20:44, курсовая работа
Турбо-Пролог (Turbo Prolog) является языком искусственного интеллекта (ИИ). Разработан этот язык компанией Borland International и характеризуется высокой скоростью работы и низкой стоимостью, что делает Турбо-Пролог весьма популярным в широких кругах обладателей персональных компьютеров.
Содержание 1
Глава 1. Описание языка Турбо-Пролог 2
1.1 Введение 2
1.2 Пакет системы Турбо-Пролог 5
1.2.1 Главное меню системы Турбо-Пролог 6
1.2.2 Запуск на счет программы, написанной на Турбо-Прологе 7
1.2.3 "Добро пожаловать в систему Турбо-Пролог!" 7
1.2.4 Сохранение программного файла 8
1.2.5 Просмотр каталога директории 8
1.2.6 Загрузка и редактирование программного файла 9
1.3 Заключение 10
Глава 2. Основные понятия языка Турбо-Пролог 11
2.1 Ведение 11
2.2 Декларативные и императивные языки 11
2.2.1 Логика предикатов 12
2.2.2 Пролог и логика предикатов 14
2.3 Управление программой 16
2.3.1 Цели программы 16
2.3.3 Результат доказательства цели 17
2.3.4 Связки и другие символы 17
2.3.5 Цели и подцели 18
2.4 Внутренние подпрограммы унификации Турбо-Пролога 18
2.4.1 Представление данных при помощи фактов и правил 19
2.4.2 Обработка правил и фактов во время унификации 19
2.4.3 Откат 22
2.5 Заключение 23
Глава 3. Основы программирования на Турбо-Прологе 24
3.1 Введение 24
3.2 Структура программ Турбо-Пролога 24
3.2.1 Описание доменов и предикатов 26
3.2.2 Правила образования имен в Турбо-Прологе 29
3.3 Предикаты и утверждения 29
3.3.1 Использование внешних и внутренних целей 30
3.3.2 Предикаты и утверждения разных арностей 33
3.3.3 Отрицание 33
3.4 Арифметика в Турбо-Прологе 35
3.5 Заключение 36
4. Примеры программ на языке Турбо-Пролог 37
5. Заключение 41
Список литературы 43
Программа, работу с которой мы сейчас начинаем, имеет целью дать необходимые навыки в использовании меню системы и основных команд редактора. Программа называется WELCOME.PRO.
Перейдите при помощи стрелки к команде главного меню Edit и нажмите клавишу Enter (либо просто введите латинскую букву E). При этом в левом верхнем углу окна
Editor появится мерцающая черточка - курсор редактора. Теперь редактор Турбо-Пролога готов принять вводимый вами с клавиатуры текст.
Набейте текст программы WELCOME.PRO:
predicates
hello
goal
hello.
clauses
hello :-
write("Welcome to Turbo Prolog!"), nl.
Когда вы доходите до конца очередной строки, нажимайте клавишу Enter для перехода на следующую. Для удаления неверного символа нужно прибегнуть к помощи клавиши BackSpace. Выравнивание строк в Турбо-Прологе, так же как и в других языках, преследует цель придания программе несколько большей наглядности и не влияет на ее выполнение.
Вы ввели в компьютер вашу первую программу на Турбо-Прологе. Для того чтобы запустить ее на счет, сначала требуется покинуть редактор системы, а для этого нужно нажать клавишу Esc. Курсор редактора при этом исчезнет, а курсор главного меню станет указывать на команду Edit. Задайте теперь команду Run и пронаблюдайте за двумя появившимися во время трансляции программы строками в окне сообщений Message и за результатом работы программы в окне диалога Dialog.
Первая строка в окне сообщений указывает на то, что началась трансляция программы WELCOME.PRO. Трансляция задается автоматически при задании команды Run, т. е. нет необходимости прибегать к помощи специальной команды Compile.
Турбо-Пролог позволяет адресовать результат трансляции либо на диск, либо в оперативную память. При задании Run программа транслируется в оперативную память. Транслировать программу на диск пока вы лишь учитесь работать на Турбо-Прологе, нет необходимости. Но в дальнейшем вы можете создавать и объектные файлы для совместного редактирования с другими объектными модулями, и выполнимые файлы, которые можно запускать на счет вне среды Турбо-Пролога. Как вы, вероятно, заметили, Турбо-Пролог транслирует столь малую программу очень и очень быстро, за какие-то доли секунды. Вторая строка в окне сообщений сигнализирует о трансляции предиката hello.
Теперь можно окончить сеанс работы с Турбо-Прологом, если вы этого хотите, конечно. Если в рабочий файл были внесены хоть какие-то изменения, система спросит, нужно ли записывать на диск новый исправленный вариант файла. Для обозначения положительного ответа необходимо нажать клавишу Y. Если команда Quit была задана случайно, ее можно отменить при помощи Esc.
Для того, чтобы записать на диск программу и таким образом сохранить ее, необходимо выйти из редактора (если вы находитесь в режиме редактирования), нажав клавишу Esc, а затем выбрать команду Files и подкоманду Save во вновь появившемся меню (либо нажав S, либо используя стрелки и клавишу Enter). В результате этих действий на экране возникнет небольшое окно, в котором будет высвечено либо заданное по умолчанию имя файла (как, например, WORK.PRO), либо то имя, которое вы присвоили
файлу сами. Имя файла можно оставить без изменений, а можно и отредактировать. В нашем случае следует ввести имя WELCOME.PRO, а затем нажать Enter.
Если на диске уже есть файл с указанным именем (более ранняя версия редактируемой программы или какая-либо иная программа), то в результате операции записи на диск расширение имени этого файла будет сменено на .BAK, чтобы пометить старый вариант файла. Не забывайте сохранять отредактированный файл перед тем, как окончить сеанс работы с Турбо-Прологом. В противном случае модифицированный вариант программы будет утерян.
Достаточно частое сохранение рабочего файла на диск очень полезно. В случае отказа электропитания, или программного сбоя компьютера вы всегда будете иметь достаточно "свежий" вариант программы. Некоторые программисты записывают очередные версии программы под разными именами. Генерация таких многочисленных "поколений" программных файлов может также быть полезной, так как позволяет проследить все этапы развития программы.
Для того чтобы просмотреть каталог файлов какой-либо директории, необходимо выбрать в главном меню команду Files и подкоманду Directory в появившемся меню команды. На экране возникнет окно, в котором перечисляются все файлы текущей директории .PRO. Если вы хотите увидеть каталог другой директории, то следует ввести путь доступа к этой директории, а затем нажать клавишу Enter. В ответ система попросит задать маску интересующих вас файлов (File mask). По умолчанию стоит маска *.PRO. Можно оставить эту маску, а можно ввести и свою. После того, как вы нажмете Enter, в окне появятся имена всех файлов заданной директории, удовлетворяющие заданной маске.
Турбо-Пролог обладает очень мощным экранным редактором, оснащенным большим количеством средств, облегчающих работу программиста. В этом состоит важное отличие Турбо-Пролога от других реализаций Пролога: некоторые из них вообще не обладают встроенными редакторами и приходится выходить из них каждый раз, как только возникает необходимость внести в программу хоть малейшее изменение. Большинство команд редактора Турбо-Пролога совпадают с командами редактора WordStar. Если вы знакомы с WordStar, или с другими похожими редакторами, такими, например, как редактор Турбо-Паскаля, то будет несложно обучиться и командам Турбо-Пролога.
Для того чтобы загрузить в окно редактора уже существующий файл, требуется выбрать команду Files главного меню и подкоманду Load в меню Files. Если в ответ на запрос имени файла просто нажать клавишу Enter, то на экране в специальном окне будет высвечен перечень файлов директории .PRO. Теперь, используя четыре стрелки можно добраться до имени интересующего вас файла, и после этого нажать клавишу Enter. Если же вы решили набрать имя файла с клавиатуры, нет необходимости указывать его расширение, так как по умолчанию считается, что файл имеет расширение .PRO. Работая с редактором Турбо-Пролога, можно в любой момент получить информацию о любой из его команд; для этого нужно нажать функциональную клавишу F1. На экране появляется небольшое меню подсказки Help. Если вы выберете первую опцию из предлагаемого списка, то на экране возникнет окно Help. Окно демонстрирует краткий перечень команд редактора и другую полезную информацию о редакторе. Нажав комбинацию Shift-F10, можно расширить это окно до размеров полного экрана; повторное нажатие Shift-F10 вернет окно к его первоначальным габаритам (эта операцию можно проделать с любым из окон системы). Другие опции под- сказки позволяют получить несколько более специфическую информацию об определенных группах команд.
Если вам требуется создать новый программный файл, а в окне редактора уже находится какой-либо другой, то возникает необходимость очистить окно от этого файла. Чтобы проделать это, необходимо задать команду главного меню Files, а в нем подкоманду New File. Система запросит подтверждения. Если нажать Y, то окно очистится от текста, после чего приступить к набивке новой программы.
В настоящей главе были описаны основные характеристики Турбо-Пролога, а также приведены инструкции по установке системы. На примере ввода и запуска на счет короткой и очень простой по структуре программы вы познакомились с основами работы в Турбо-Прологе. В главе было также приведено достаточно подробное описание меню системы, которое постоянно используется на протяжении всей работы над программой.
Информация, представленная в настоящей главе, так же как, впрочем, и в некоторых других частях работы, рассчитана не столько на чтение и запоминание, сколько на использование ее в качестве руководства в процессе работы с системой.
Глава 2. Основные понятия языка Турбо-Пролог
В этой главе язык Турбо-Пролог рассматривается на концептуальном уровне. И, хотя здесь вводятся основные понятия языка, данная глава не предназначена для изучения синтаксиса Турбо-Пролога и правил построения программ. Основная цель состоит в том, чтобы показать, почему Турбо-Пролог называется декларативным языком, и в чем отличие декларативных языков от императивных.
При освоении нового языка важно изучить способ представления данных и процесс выполнения программы.
В этой главе показано, как внутренние подпрограммы унификации системы Турбо-Пролог управляют выполнением программы и обработкой
данных. "Псевдопрограммы" и примеры фрагментов программ помогут понять основы использования Турбо-Пролога для решения задач.
По-видимому, наилучший способ понять идеи декларативных языков состоит в рассмотрении их в контексте эволюции языков программирования. Первоначально способ решения задачи на ЭВМ заключался в составлении программ на "естественном языке" ЭВМ, т.е. в машинных кодах. Имея полностью в своем распоряжении память и центральный процессор ЭВМ, программисты, использовавшие машинные языки, должны были задавать машине способ решения задачи в виде последовательности шагов, которые должна выполнить машина, и способы обработки данных. Программы на машинных языках были императивными, то есть они диктовали шаги реше- ния задачи (алгоритм) и способы обработки данных.
Программирование на машинных языках требует много времени,
и кроме того, эти языки сложны для чтения и составления программ программистом. Поэтому были разработаны специальные программы для трансляции в машинный код более естественных и легко понимаемых языковых конструкций, описывающих алгоритмы. Транслирующие программы преобразуют команды, заданные в символической форме, в последовательность команд машинного языка. Эти программы называются компиляторами и интерпретаторами. Транслируемые команды, заданные в символической форме, представляют собой языки высокого уровня, такие, например, как Фортран и Кобол. Создание языков высокого уровня существенно увеличило скорость разработки программ и сократило потребность в программистах, хорошо знакомых с архитектурой ЭВМ. Но программы, написанные на языках высокого уровня, все еще оставались императивными по своей природе, так как все еще в них было необходимо указывать шаги обработки и манипулирования данными.
Большинство используемых сейчас языков являются императивными. Но в 60-х гг. были разработаны неимперативные языки, например, Лисп и Исвим, основанные на декларативных принципах. Неимперативные языки, создали новые методы программирования, которые позволили сгладить различия между шагами решения задачи и манипулированием данными.
Пролог (ПРОграммирование на ЛОГическом языке) был разработан в течении этого периода. Программы на Прологе содержат утверждения, сделанные программистом, т.е. "декларации" логических соотношений, необходимых для решения задачи. Языки, позволяющие описывать логические соотношения, при помощи которых программа может решить задачу, называются декларативными языками. Программы на таких языках объявляют, какие результаты дадут те или иные действия.
Программист предостав- ляет самой системе разобраться в совокупности способов решения задачи.
Для тех, кто привык пользоваться императивным языком, декларативные языки кажутся почти лишенными какой-либо строгости. Несмотря на это, часто программа решения конкретной задачи, составленная на декларативном языке, требует значительно меньше операторов, чем при использовании императивных языков. Основная часть программы на императивном языке предназначена для управления шагами программы, обрабатывающими данные. На Прологе, наоборот, большая часть управления программой неявно содержится в конструкциях языка или оказывается объявленной в декларативной форме.
Программисты, имеющие опыт работы на императивных языках, иногда теряются, сталкиваясь с полным отсутствием средств управления программой. Люди, никогда раньше не занимавшиеся программированием, могут освоить декларативные языки быстрее, чем программисты, знакомые с императивными языками. Если вы программировали на некоторых императивных языках, то не думайте, что вы сразу же сможете освоить Турбо-Пролог, используя ранее полученные навыки. Необходимо научиться формулировать логические соотношения, описывающие задачу, а программа
на Турбо-Прологе выполнит все необходимые действия.
Турбо-Пролог - это декларативный язык, программы на котором содержат объявления логических взаимосвязей, необходимых для решения задачи. Обозначения, используемые в Турбо-Прологе для выражения этих логических взаимосвязей, унаследованы из логики предикатов.
В логике предикатов рассматриваются отношения между утверждениями и объектами.
Например, рассмотрим предложение
Мэри любит яблоки
Прочитав это предложение, вы узнаете, что имеется факт, утверждающий, что Мэри любит яблоки. Добавим еще одно предложение к тому, что вы уже знаете:
Бет любит то же самое, что и Мэри
Используя эти два предложения, вы можете придти к заключению, что
Бет тоже любит яблоки. Получая это заключение, вы пользовались упрощенной формой логического вывода, используемого в логике предикатов для получения нового факта из двух имеющихся утверждений.
Теперь опять посмотрим на эти предпосылки, сделав некоторые незначительные изменения в одном из предложений:
Мэри любит яблоки
Бет любит нечто, если Мэри любит (это же) нечто
Порядок слов, т.е. синтаксис
второго предложения был
его значение осталось тем же самым. Другими словами, второе предложение семантически эквивалентно: