Программирование на языке пролог
Шрифт:
Предикаты обработки особых ситуаций МПролога позволяют программисту самому программировать действия по восстановлению при ошибках. Например, ниже представлен простой вариант средства 'спроси у пользователя', позволяющего запросить
ask_the_user:- broken _call(С), outterm("How to continue from: "), outterm(C), outterm("?"), nl, interm(C), ineot.
где broken_call(С)– это стандартный предикат, конкретизирующий переменную С ошибочным целевым утверждением. Выполнив целевое утверждение
newhandler("undefined predicate", ask_the_user)
система будет вызывать ask_the_user(спроси_у_пользователя) всякий раз, когда что-либо окажется неопределенным. Например, определив предикаты плотностьи наскак в разд. 2.5, но оставив неопределенным предикат площадь:
плотность(X,Y):- нас(X,Р), площадь(X,A), Y is P/A.
нас(китай,800).
. . .
мы можем наблюдать следующий
диалог:*? плотность(китай,D).
How to continue from площадь(китай,_101)?
* площадь(китай,4).
D = 200
Continue (y/n)?
* y
NO
*? плотность(китай,D).
How to continue from площадь(китай,_101)?
* n.
NO
Другой важный встроенный предикат – это error_protect (Call, Handler),который выполняет целевое утверждение Callв защищенном окружении: когда внутри Callвозникает особая ситуация (не обрабатываемая текущим обработчиком особых ситуаций), выполняется Handler.
Средства трассировки МПролога аналогичны тем, что имеются в Прологе-10.
MPROLOG Language Reference Manual
MPROLOG User's Guide /VAX/11-VMS/ MPROLOG User's Guide /VAX/11 – UNIX/ MPROLOG User's Guide /IBM – VM/CMS/ MPROLOG User's Guide /Siemens BS2000/
Getting Started with MPROLOG
Указанная литература может быть получена через институт по координации вычислительной техники (SZKI), г. Будапешт, ВНР .