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

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

Жанры

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

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

Модульность

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

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

Назад в ссср 6

Дамиров Рафаэль
6. Курсант
Фантастика:
попаданцы
альтернативная история
6.00
рейтинг книги
Назад в ссср 6

Вечная Война. Книга VII

Винокуров Юрий
7. Вечная Война
Фантастика:
юмористическая фантастика
космическая фантастика
5.75
рейтинг книги
Вечная Война. Книга VII

Сиротка

Первухин Андрей Евгеньевич
1. Сиротка
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Сиротка

Мимик нового Мира 3

Северный Лис
2. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 3

Убийца

Бубела Олег Николаевич
3. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Убийца

Совок 4

Агарев Вадим
4. Совок
Фантастика:
попаданцы
альтернативная история
6.29
рейтинг книги
Совок 4

Довлатов. Сонный лекарь 2

Голд Джон
2. Не вывожу
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Довлатов. Сонный лекарь 2

Наизнанку

Юнина Наталья
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Наизнанку

Последний попаданец

Зубов Константин
1. Последний попаданец
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Последний попаданец

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Сильнейший ученик. Том 1

Ткачев Андрей Юрьевич
1. Пробуждение крови
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Сильнейший ученик. Том 1

Путь Шамана. Шаг 6: Все только начинается

Маханенко Василий Михайлович
6. Мир Барлионы
Фантастика:
фэнтези
рпг
попаданцы
9.14
рейтинг книги
Путь Шамана. Шаг 6: Все только начинается

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Неверный

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