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

на главную

Жанры

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

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

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

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Великий перелом

Ланцов Михаил Алексеевич
2. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Великий перелом

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6