Чтение онлайн

на главную - закладки

Жанры

Программирование на языке пролог
Шрифт:

fdelclause(EXPR)

исключает первое утверждение, заголовок которого может быть сопоставлен с EXPR,тогда как

fsupclause(EXPR)

только подавляет его. Это означает, что при возвратном ходе это утверждение возвращается на свое место. С помощью этого предиката можно, например, по-другому определить предикат перейтииз разд. 7.2:

перейти(X,X).

перейти(X,X):- в_след_комн(Х,Z), перейти(Z,Y).

в_след_комн(Х,Z):- fsupclause(d(X,Z)); fsupclause(d(Z,X)).

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

Имеется большой набор предикатов вывода, позволяющий осуществлять разнообразные виды форматированного вывода. Например, можно задавать границы строк и предельную глубину вывода. Задание глубины вывода полезно при выводе очень сложных термов (или даже бесконечных термов поскольку в МПрологе соответствующих проверок не делается), когда нас интересует только их общая структура. Задание глубины вывода равной Nозначает, что фактически выводиться будут только первые Nуровней терма, а подтермы уровня N+1будут представлены как (…).

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

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), г. Будапешт, ВНР .

Поделиться:
Популярные книги

Я уже граф. Книга VII

Дрейк Сириус
7. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я уже граф. Книга VII

Ефрейтор. Назад в СССР. Книга 2

Гаусс Максим
2. Второй шанс
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Ефрейтор. Назад в СССР. Книга 2

Неучтенный элемент. Том 3

NikL
3. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 3

Хозяин Стужи

Петров Максим Николаевич
1. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
7.00
рейтинг книги
Хозяин Стужи

Кодекс Охотника XXVIII

Винокуров Юрий
28. Кодекс Охотника
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника XXVIII

Первый среди равных. Книга XII

Бор Жорж
12. Первый среди Равных
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Первый среди равных. Книга XII

Неверный

Тоцка Тала
Любовные романы:
современные любовные романы
5.50
рейтинг книги
Неверный

Печать мастера

Лисина Александра
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Печать мастера

Гранд империи

Земляной Андрей Борисович
3. Страж
Фантастика:
фэнтези
попаданцы
альтернативная история
5.60
рейтинг книги
Гранд империи

Хозяин Теней 7

Петров Максим Николаевич
7. Безбожник
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Хозяин Теней 7

Начало шторма

Мазуров Дмитрий
9. Громовая поступь
Фантастика:
фэнтези
рпг
5.75
рейтинг книги
Начало шторма

Вперед в прошлое!

Ратманов Денис
1. Вперед в прошлое
Фантастика:
попаданцы
5.00
рейтинг книги
Вперед в прошлое!

Жизнь, которой не было

Денис Палимов
1. Жизнь, которой не было
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Жизнь, которой не было

Я еще граф. Книга #8

Дрейк Сириус
8. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Я еще граф. Книга #8