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

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

Жанры

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

Здесь приводится пример сеанса работы с Прологом-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. Приведем одно важное замечание относительно операторов с высоким приоритетом: поскольку ',' является оператором, то настоятельно рекомендуется во избежание двусмысленности заключать в скобки все термы, записанные с использованием операторов одинакового или более высокого приоритета. Это гарантирует, например, что конструкция

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

Сама себе хозяйка

Красовская Марианна
Любовные романы:
любовно-фантастические романы
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