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

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

Жанры

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

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

Сердце Дракона. Том 11

Клеванский Кирилл Сергеевич
11. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
6.50
рейтинг книги
Сердце Дракона. Том 11

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

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

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

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

Кронос Александр
4. Мастер Разума
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер Разума IV

Авиатор: назад в СССР

Дорин Михаил
1. Авиатор
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Авиатор: назад в СССР

Кадры решают все

Злотников Роман Валерьевич
2. Элита элит
Фантастика:
боевая фантастика
попаданцы
альтернативная история
8.09
рейтинг книги
Кадры решают все

Плеяда

Суконкин Алексей
Проза:
военная проза
русская классическая проза
5.00
рейтинг книги
Плеяда

Потусторонний. Книга 2

Погуляй Юрий Александрович
2. Господин Артемьев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Потусторонний. Книга 2

Ученик. Книга 4

Первухин Андрей Евгеньевич
4. Ученик
Фантастика:
фэнтези
5.67
рейтинг книги
Ученик. Книга 4

Законник Российской Империи. Том 3

Ткачев Андрей Юрьевич
3. Словом и делом
Фантастика:
городское фэнтези
альтернативная история
аниме
дорама
5.00
рейтинг книги
Законник Российской Империи. Том 3

Ваше Сиятельство 7

Моури Эрли
7. Ваше Сиятельство
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Ваше Сиятельство 7

Война

Валериев Игорь
7. Ермак
Фантастика:
боевая фантастика
альтернативная история
5.25
рейтинг книги
Война

Младший сын князя. Том 4

Ткачев Андрей Юрьевич
4. Аналитик
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Младший сын князя. Том 4