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

на главную

Жанры

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

После завершения указанных выше действий пользователь может запросить другие действия. Предикаты 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

Синтаксис

Синтаксис МПролога в основном совместим с синтаксисом Пролога-10. Правда, позиции операторов, их приоритеты и ассоциативность в МПрологе отличаются, однако, для обеспечения совместимости с тем, что описано в данной книге, предусмотрен встроенный предикат ор. Списки можно задавать как с помощью точечной записи (используя для этого предварительно описанный оператор '.'), так и с помощью скобочной записи [].

Строки в МПрологе не эквивалентны списку кодов, составляющих их литер. Это означает, что пример из гл. 5 (база данных исторических событий) с вопросом событие(1524,Х)будет работать и ответом будет 'Васко да Гама умер'.

Модульность

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

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

Третье правило диверсанта

Бычков Михаил Владимирович
Фантастика:
постапокалипсис
5.67
рейтинг книги
Третье правило диверсанта

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

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

Тихие ночи

Владимиров Денис
2. Глэрд
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Тихие ночи

Ненаглядная жена его светлости

Зика Натаэль
Любовные романы:
любовно-фантастические романы
6.23
рейтинг книги
Ненаглядная жена его светлости

Евреи России. Времена и события. История евреев Российской империи

Кандель Феликс Соломонович
Научно-образовательная:
история
5.00
рейтинг книги
Евреи России. Времена и события. История евреев Российской империи

Бродяга

Первухин Андрей Евгеньевич
1. Бродяга
Фантастика:
попаданцы
5.40
рейтинг книги
Бродяга

Сапер. Том II

Вязовский Алексей
2. Сапер
Фантастика:
альтернативная история
4.25
рейтинг книги
Сапер. Том II

Старый, но крепкий 3

Крынов Макс
3. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
5.00
рейтинг книги
Старый, но крепкий 3

Воплощение Похоти

Некрасов Игорь
1. Воплощение Похоти
Фантастика:
юмористическое фэнтези
попаданцы
рпг
аниме
5.00
рейтинг книги
Воплощение Похоти

Двойник короля 17

Скабер Артемий
17. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 17

Кодекс Императора III

Сапфир Олег
3. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора III

Печать пожирателя 2

Соломенный Илья
2. Пожиратель
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Печать пожирателя 2

Барон

Первухин Андрей Евгеньевич
5. Ученик
Фантастика:
фэнтези
5.60
рейтинг книги
Барон

Изгой Проклятого Клана

Пламенев Владимир
1. Изгой
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Изгой Проклятого Клана