Материал: Терёхин В. В. Turbo Prolog

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

1.2.5 Просмотр каталога директории

Для того чтобы просмотреть каталог файлов какой-либо директории, необходимо выбрать в главном меню команду Files и подкоманду Directory в появившемся меню команды. На экране возникнет окно, в котором перечисляются все файлы текущей директории .PRO. Если вы хотите увидеть каталог другой директории, то следует ввести путь доступа к этой директории, а затем нажать клавишу Enter. В ответ система попросит задать маску интересующих вас файлов (File mask). По умолчанию стоит маска *.PRO.

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

1.2.6 Загрузка и редактирование программного файла

Турбо-Пролог обладает очень мощным экранным редактором, оснащенным большим количеством средств, облегчающих работу программиста. В этом состоит важное отличие Турбо-Пролога от других реализаций Пролога: некоторые из них вообще не обладают встроенными редакторами и приходится выходить из них каждый раз, как только возникает необходимость внести в программу хоть малейшее изменение. Большинство команд редактора Турбо-Пролога совпадают с командами редактора WordStar. Если вы знакомы с WordStar, или с другими похожими редакторами, такими, например, как редактор ТУРБО-ПАСКАЛя, то будет несложно обучиться и командам Турбо-Пролога.

Для того чтобы загрузить в окно редактора уже существующий файл, требуется выбрать команду Files главного меню и подкоманду Load в меню Files. Если в ответ на запрос имени файла просто нажать клавишу Enter, то на экране в специальном окне будет высвечен перечень файлов директории

.PRO. Теперь, используя четыре стрелки можно добраться до имени интересующего вас файла, и после этого нажать клавишу Enter. Если же вы решили набрать имя файла с клавиатуры, нет необходимости указывать его расширение, так как по умолчанию считается, что файл имеет расширение

.PRO. Работая с редактором Турбо-Пролога, можно в любой момент получить информацию о любой из его команд; для этого нужно нажать функциональную клавишу F1. На экране появляется небольшое меню подсказки Help. Если вы выберете первую опцию из предлагаемого списка, то на экране возникнет окно Help. Окно демонстрирует краткий перечень команд редактора и другую полезную информацию о редакторе. Нажав комбинацию Shift-F10, можно расширить это окно до размеров полного экрана; повторное нажатие Shift-F10 вернет окно к его первоначальным габаритам (эта операцию можно проделать с любым из окон системы). Другие опции подсказки позволяют получить несколько более специфическую информацию об определенных группах команд.

Если вам требуется создать новый программный файл, а в окне редактора уже находится какой-либо другой, то возникает необходимость очи-

11

стить окно от этого файла. Чтобы проделать это, необходимо задать команду главного меню Files, а в нем подкоманду Zap file in editor. Система запросит подтверждения. Если нажать Y, то окно очистится от текста.

Вслед за этим возникнет маленькое окошко, предназначенное для ввода имени нового файла. Введите новое имя, если таковое требуется, и нажмите Enter. Если никакое имя введено не будет, то новый файл будет именоваться старым именем. После нажатия Enter окошко исчезнет, а курсор главного меню будет указывать на Files. Теперь его можно сместить к Edit и нажать Enter, после чего приступить к набивке новой программы.

*Упражнение

1.2.Войдите в редактор Турбо-Пролога. Загрузите программу WELCOME и добавьте в нее строку

nl,write(“Have a nice day.”)

вслед за строкой

write("Welcome to Turbo Prolog!")

Запустите на счет измененный вариант программы.

1.2.7 Печать файла

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

1.4 Заключение

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

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

Глава 2. Основные понятия языка Турбо-Пролог

2.1Ведение

Вэтой главе язык Турбо-Пролог рассматривается на концептуальном уровне. И, хотя здесь вводятся основные понятия языка, данная глава не предназначена для изучения синтаксиса Турбо-Пролога и правил по-

12

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

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

2.2 Декларативные и императивные языки

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

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

Большинство используемых сейчас языков являются императивными. Но в 60-х гг. были разработаны неимперативные языки, например, Лисп и Исвим, основанные на декларативных принципах. Неимперативные языки, создали новые методы программирования, которые позволили сгладить различия между шагами решения задачи и манипулированием данными.

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

13

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

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

Программисты, имеющие опыт работы на императивных языках, иногда теряются, сталкиваясь с полным отсутствием средств управления программой. Люди, никогда раньше не занимавшиеся программированием, могут освоить декларативные языки быстрее, чем программисты, знакомые с императивными языками. Если вы никогда не программировали, то не думайте, что изучение Турбо-Пролога будет сложным из-за неумения программировать на языках типа Си, Бейсик или Паскаль. Если вы программировали на некоторых императивных языках, то не думайте, что вы сразу же сможете освоить Турбо-Пролог, используя ранее полученные навыки. Необходимо научиться формулировать логические соотношения, описывающие задачу, а программа на Турбо-Прологе выполнит все необходимые действия.

2.2.1 Логика предикатов

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

В логике предикатов рассматриваются отношения между утверждениями и объектами. Не пугайтесь термина "логика предикатов". По всей вероятности основные понятия (а может быть и терминология) логики предикатов вам уже знакомы.

Например, рассмотрим предложение

Мэри любит яблоки

Прочитав это предложение, вы узнаете, что имеется факт, утверждающий, что Мэри любит яблоки. Добавим еще одно предложение к тому, что вы уже знаете:

Бет любит то же самое, что и Мэри

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

14

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

Теперь опять посмотрим на эти предпосылки, сделав некоторые незначительные изменения в одном из предложений:

Мэри любит яблоки Бет любит нечто, если Мэри любит (это же) нечто

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

Бет любит то же самое, что и Мэри

Если известны факты о том, что любит Мэри, то опять можно заключить, что Бет любит яблоки.

Вспомним, что логика предикатов рассматривает отношения между утверждениями и объектами. В предпосылках "Мэри любит яблоки" и "Бет любит нечто, если Мэри любит (это же)" существует отношение между субъектом и объектом. То же самое справедливо и для полученного путем логического вывода факта. "Субъект" - это Мэри или Бет, а "объект" - это яблоки. Отношение между Мэри или Бет и яблоками называется отношением связывания. Объектами в этом отношении являются Мэри, Бет и яблоки.

Если убрать лишние слова, то отношение, соответствующее первому предложению будет иметь вид:

Объект

Отношение

Объект

Мэри

любит

яблоки

Заметьте, что слова, обозначающие отношение и объекты имеют порядок, естественный для фраз русского языка. Но можно поместить имя отношения перед объектами:

Отношение

Объект

Объект

любит

Мэри

яблоки

Несмотря на изменение формы, его смысл остался тем же самым, так как был изменен только синтаксис.

Теперь опять рассмотрим предложение:

Бет любит нечто, если Мэри любит (это же) нечто ,

и заменим слово "нечто" на местоимение "это":

Бет любит это, если Мэри любит это

Заметьте, что это предложение выражает два отношения "любит". Они соединены условием, выраженным словом "если".

Условие "если" требует проверки предпосылки для вывода нового факта. И, таким образом, имеются следующие отношения:

Отношение

Объект

Объект

Условие

любит

Мэри

яблоки

 

любит

Бет

это

если

любит

Мэри

это

 

Как вы, вероятно знаете,

"это" является местоимением, а местоиме-

ния используются вместо имени существительного. Местоимение "это" мо-

15