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

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

Жанры

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

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

Сначала мы находимся на уровне монитора операционной системы TOPS-10 и просим запустить Пролог.

.r prolog

Prolog-10 version 3.3

Copyright (С) 1981 by D. Warren, F. Pereira and L. Byrd

|?- likes(X,Y).

no

Содержимое заголовка, конечно, может несколько меняться от одной версии системы к другой. Литеры «|?-» выданы Прологом как «приглашение». Тем самым он сообщает нам, что ждет вопроса. Мы задали вопрос и получили ответ no (нет). Это неудивительно, поскольку сейчас в базе данных еще нет никаких фактов. Теперь мы полагаем, что существует файл, test.pl, и мы заполняем базу данных его содержимым.

|?- ['test.pl'].

test.pl consulted 58 words 0.01 sec.

yes

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

|?- likes(john,bertrand).

no

|?- likes(john,albert).

no

Это просто ряд вопросов о том, кто кому нравится. Пролог не может найти в базе данных сопоставимых фактов.

|?- listing(likes).

likes(john,alfred).

likes(alfred,john).

likes(bertrand,john).

likes(david,bertrand).

likes(john,_l):- likes(_l,bertrand).

yes

Чтобы узнать, какие утверждения с заданным предикатом имеются в базе данных, мы задаем вопрос с помощью специального встроенного предиката listing. Этот специальный вопрос заставляет Пролог выдать все утверждения, содержащие предикат likes. Заметим, что неконкретизированные переменные Пролог выводит в виде литеры подчеркивания, за которой следует число. Последнее утверждение в базе данных было записано в файле в виде:

likes(john,X):- likes(X,bertrand).

Продолжим наш пример:

|?- likes(john,X).

X = alfred;

X = david;

no

Здесь, с помощью нажатия клавиш «;» и «RETURN» мы запрашиваем альтернативные ответы на заданный вопрос. Было выдано два возможных ответа; больше Пролог ничего не смог найти.

|?- likes(X,Y).

X = john,

Y = alfred;

X = alfred,

Y = john;

X = bertrand,

Y = john;

X = david,

Y = bertrand;

X = john,

Y = david;

no

На этот раз ответ системы состоит из значений, которыми конкретизированы обе переменные. И опять для получения альтернативных ответов мы вводим «;» и «RETURN» до тех пор, пока новых ответов не окажется.

|?- [user].

Теперь мы просим Пролог читать утверждения из файла user. Это означает, что утверждения следует читать с терминала. Прочитанные утверждения будут дописаны в конец базы данных. Перед вводом утверждений (в отличие от ввода вопросов) в качестве приглашения Пролог выдает символ «|» вместо «|?-».

[likes(timothy,bertrand).

|

user consulted 10 words 0.03 sec.

yes

После ввода первого утверждения мы сообщаем Прологу, что хотим прекратить чтение утверждений. Это делается путем одновременного нажатия клавиш «CONTROL» и «Z». При этом перед вводом комбинации «CONTROL Z» мы могли бы ввести не один, а несколько фактов и правил. Теперь Пролог завершил обработку предыдущего вопроса и ждет ввода нового.

|?- likes(john,X).

X = alfred;

X = david;

X = timothy;

no

Здесь мы снова просим выдать альтернативные ответы. Заметим, что ввод нового утверждения привел к появлению нового ответа, который ранее при том же вопросе не выдавался.

|?- likes(bertrand,Y).

Y = john

yes

Здесь показан другой способ работы с альтернативами. После первого ответа мы ввели «RETURN». Это привело к тому, что весь вопрос завершился успешно, и Пролог перешел к ожиданию следующего вопроса.

|?- core 36864 (7680 lo-seg + 29184 hi-seg)

heap 2560 = 1573 in use + 987 free

global 1177 = 16 in use + 1161 free

local 1024 = 16 in use + 1008 free

trail 511 = 0 in use + 511 free

0.36 sec. runtime

В ответ на последнее приглашение «|?-» мы ввели комбинацию «CONTROL Z», чтобы показать, что мы закончили работу с системой. В ответ Пролог выдал нам некоторую статистическую информацию, и мы снова вернулись в монитор TOPS-10. Полный протокол этого сеанса работы был записан в файл prolog.log.

Синтаксис

Синтаксис Пролога-10 в основном совпадает с нашим описанием, Правда, он несколько менее строг в отношении того, что считать правильными атомами и переменными, чем те правила, которые приведены в книге. Каждый пример из этой книги удовлетворяет требованиям синтаксиса Пролога-10. Приведем одно важное замечание относительно операторов с высоким приоритетом: поскольку ',' является оператором, то настоятельно рекомендуется во избежание двусмысленности заключать в скобки все термы, записанные с использованием операторов одинакового или более высокого приоритета. Это гарантирует, например, что конструкция

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

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

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

Последний Паладин. Том 5

Саваровский Роман
5. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 5

Бандит 2

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

Кодекс Крови. Книга VII

Борзых М.
7. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
аниме
5.25
рейтинг книги
Кодекс Крови. Книга VII

Тактик

Земляной Андрей Борисович
2. Офицер
Фантастика:
альтернативная история
7.70
рейтинг книги
Тактик

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

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

Изгой Проклятого Клана. Том 5

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

Кодекс Охотника. Книга XXXVII

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

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

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

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Эпоха Опустошителя. Том VIII

Павлов Вел
8. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том VIII

Девочка из прошлого

Тоцка Тала
3. Айдаровы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка из прошлого

Я снова царь. Книга XXXIII

Дрейк Сириус
33. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я снова царь. Книга XXXIII

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

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