КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Пример сеанса работы
Средства отладки В микро-Прологе предусмотрена возможность трассировки программы, однако средства трассировки должны быть предварительно загружены с помощью предиката LOAD. При трассировке выдается информация о процессе согласования всех целей, не содержащих встроенных предикатов. В моменты возникновения событий CALL, EXIT и FAIL, которые именуются, соответственно, как ENTER, FINISH и FAIL, выдаются соответствующие сообщения. Пользователю разрешается в момент события CALL вмешиваться в ход трассировки и задавать команды CONTINUE (продолжить выполнение с трассировкой), SKIP (прервать трассировку до завершения текущей цели), FINISH (немедленное согласование текущей цели) и FAIL (немедленная неудача в согласовании текущей цели). Литература Clark K.L., Mc-Cabe F.G. Micro-PROLOG: Programming in Logic, Prentice-Hall, 1984. [Русский перевод: Клар К., Маккейб Ф. Введение в логическое программирование на микро-Прологе.- М,; Радио и Связь, 1987.] ПРИЛОЖЕНИЕ F. СИСТЕМА МПРОЛОГ[19] В этом приложении описывается система МПролог, разработанная в Институте по координации вычислительной техники (SZKI), г. Будапешт. Название системы МПролог отражает тот факт, что в этой системе предусмотрены средства для модульной разработки программ. Кроме того, в ней поддерживается более 200 встроенных предикатов, рассчитанных на различные области применения. Синтаксис МПролога совместим с синтаксисом Пролога-10 (см. приложение D), и почти все встроенные предикаты Пролога-10 предусмотрены также и в МПрологе. Пролог доступен на следующих вычислительных комплексах:
Одна из версий МПролога (так называемый мини-МПролог) предназначена для микро- и мини-ЭВМ. Первая реализация этой системы применяется на ЭВМ IBM PC с ОС MSDOS. Ниже приводится пример сеанса работы с подсистемой разработки программ (PDSS) системы МПролог, В системе МПролог средства диалоговой разработки программ отделены от интерпретатора и реализованы в подсистеме PDSS, которая исполняет команды первичного ввода, редактирования, выполнения, трассировки и другой обработки модулей МПролога. Подсистема PDSS также позволяет задавать значительное число глобальных параметров, определяющих режимы работы команд. Например, параметр line_length (длина_строки) задает длину выводимых строк при специально форматированном выводе утверждений.
DO $S.MPRO.PDSS MPROLOG (V1.4) Program Development Subsystem 1.4:4 ( c) 1982 Institute for Coordination of Computer Techniques (SZKI), Budapest. По команде help выводится общая вспомогательная информация о возможностях PDSS (# означает приглашение системы)[20]; * help Команда; h[elp] [ТЕМА…] Выводит вспомогательную информацию по заданной теме или о возможностях самой команды help, если аргумент опущен. Можно получить информацию по следующим темам: all_global all_symbolic all_visible body bye coded consult declaration delete dynpart edit enter exception_handling execute export face focus global goal help hidden import insert interface list local match_order mode modify module move next nonprolog operator options previous query read rename replace reply reset rungoal savemod selectors set solutions status symbolic trace type untimed untrace visible = Сведения по конкретной теме, например по теме module, указанной в третьей колонке, можно получить следующим образом: *help module Команда: m[odule] [ИМЯ] Делает модуль ИМЯ текущим модулем. Если ИМЯ опущено, то текущим модулем становится `неименованный_модуль'. После этой команды никакое утверждение не помещается в поле зрения. Возможности PDSS позволяют разрабатывать несколько модулей. Данный сеанс начинается с команды module, создающей модуль, в который затем будут помещаться определения предикатов.
* module first MODULE first * enter hates(ann,john). PREDICATE hates/2 *?- hates(kate,X). NO
Команда enter используется здесь для дополнения модуля first новым утверждением. На основе одного этого утверждения ответ на вопрос hates(kate, X) получается отрицательным. В то же время, когда утверждений, относящихся к данному целевому утверждению, вообще нет, система ведет себя по-другому: такая ситуация рассматривается как особая, и она обрабатывается стандартным обработчиком особых ситуаций PDSS:
*?- likes(X,Y). Exception -505: undefined predicate In call of likes(_425,_426) Function (h for help)? * h p – enter new PDSS level b – backtrace a – abandon execution с – continue f – fail s – contents of the stack r - redo the broken call i – user handled interrupt h – help Function (h for help)' * f NO
Здесь enter new PDSS level означает выход на новый уровень команд PDSS (аналогично команде break в Прологе-10), backtrace означает вывод списка предшественников ошибочного вызова (аналогично команде backtrace в Прологе для PDP-11 с ОС UNIX). После завершения указанных выше действий пользователь может запросить другие действия. Предикаты continue и fail продолжают приостановленное выполнение программы так, как если бы вместо особой ситуации имела место согласованность или несогласованность цели с базой данных. В данном случае ввод f приводит к ответу NO. Однако систему МПролог можно заставить вести себя так, как Пролог-система, описанная в книге. Для этого достаточно в качестве обработчика особой ситуации для undefined predicate задать целевое утверждение fail:
*?- newhandler("undefined predicate",fail). Yes *?- likes(X,Y). No
Будем считать, что файл test содержит ту же самую последовательность утверждений, что и в предыдущих приложениях. Тогда мы можем считать содержащиеся в нем утверждения в базу данных. При этом, если параметр auotostate не в состоянии «off» (выключено), то будет выводиться функтор (т. е. имя/число аргументов) читаемых из файла предикатов.
*?- [test]. likes/2 Yes *?- listing(likes/2). likes(john,alfred). likes(alfredjohn). likes(bertrandjohn). likes(david,bertrand). likes(john,ANYBODY): - likes(ANYBODY,bertrand). Yes
Переменные (в данном случае ANYBODY) записаны прописными буквами как в Прологе-10. Однако в МПрологе предусмотрена особая возможность сохранения символьных имен переменных в пользовательской программе. Альтернативным способом вывода заданного предиката или некоторых из определяющих его утверждений является использование команды type:
* type likes/2 likes(john,alfred). likes(alfred,john). likes(bertrand,john). likes(david,bertrand). likes(john,ANYBODY):- likes(ANYBODY,bertrand).
Второе и четвертое утверждения данного предиката можно просмотреть с помощью команды;
* type likes / 2 CL (2,4) likes(alfred, john). likes(david,bertrand).
А все утверждения, включающие bertrand выбираются следующим образом:
* type likes / 2 CL (bertrand) likes(bertrand, john). likes(david,bertrand). likes(john,ANYBODY):- likes(ANYBODY,bertrand).
Получение альтернативных решений для целевого утверждения осуществляется немного иначе, чем в Прологе-10:
*?- likes(john,Who). WHO = alfred Continue (y/n)? * y WHO = david Continue (y/n)? * у NO
Новые утверждения можно добавлять как с помощью команды enter, так и путем чтения псевдо-файла user (как в Прологе-10):
*?- [user]. likes(timothy,bertrand). likes/2+6 * bye Yes
Команда ввода вопроса (?-) не выдает сведений о времени его выполнения. Эту информацию можно получить путем задания команды execute (в краткой форме ':'):
*:likes(john,X). (*** CPU time: 0.27 sec, 1 calls, 0 backtracks ***)
Подсистема PDSS гибко реагирует на синтаксические ошибки. В стандартном режиме при возникновении такой ошибки пользователю предоставляется выбор: отредактировать ошибочное утверждение или выполнить целевое утверждение:
*?- likes(john,ann)). full stop expected at) Enter the editor (y/n)? * y 10: likes(john,ann)) *** Enter editor commands * 10: likes(john,ann) *** Line 10 replaced *** * end NO
Команда end закрывает цикл редактирования. Затем делается попытка согласовать отредактированную цель, и в результате получается ответ NO. Тот же метод применим и в случае чтения файла в базу данных: ошибочные утверждения могут быть отредактированы, а затем процесс чтения файла продолжается. Сеанс работы с PDSS завершается по команде bye. При этом система предупреждает пользователя о возможности утраты модулей, которые не были записаны в файлы.
* bye *** The following module(s) have not been saved: *** first Do you want to exit (y/n)? * y Normal exit from MPROLOG PDSS
Дата добавления: 2014-12-08; Просмотров: 399; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |