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

на главную

Жанры

Неизвестно

Шрифт:

Эта программа содержит шесть предложений. Каждое предложение объявляет об одном факте наличия отношения родитель.

После ввода такой программы в пролог-систему последней можно будет задавать вопросы, касающиеся отношения родитель. Например, является ли Боб родителем Пат? Этот вопрос можно передать пролог-системе, набрав на клавиатуре терминала:

?- родитель( боб, пат).

Найдя этот факт в программе, система ответит

yes (да)

Другим вопросом мог бы быть такой:

?- родитель( лиз, пат).

Система ответит

no (нет),

поскольку в программе ничего не говорится о том, является ли Лиз родителем Пат. Программа ответит "нет" и на вопрос

?- родитель( том, бен).

потому, что имя Бен в программе даже не упоминается.

Можно задавать и более интересные вопросы. Например:"Кто является родителем Лиз?"

?- родитель( X, лиз).

На этот раз система ответит не просто "да" или "нет". Она скажет нам, каким должно быть значение X (ранее неизвестное), чтобы вышеприведенное утверждение было истинным. Поэтому мы получим ответ:

X = том

Вопрос "Кто дети Боба?" можно передать пролог-системе в такой форме:

?- родитель( боб, X).

В этом случае возможно несколько ответов. Сначала система сообщит первое решение:

X = энн

Возможно, мы захотим увидеть и другие решения. О нашем желании мы можем сообщить системе (во многих реализациях для этого надо набрать точку с запятой), и она найдет другой ответ:

X = пат

Если мы потребуем дальнейших решений, система ответит "нет", поскольку все решения исчерпаны.

Нашей программе можно задавать и более общие вопросы: "Кто чей родитель?" Приведем другую формулировку этого вопроса:

Найти X и Y такие, что X - родитель Y.

На Прологе это записывается так:

?- родитель( X, Y).

Система будет по очереди находить все пары вида "родитель-ребенок". По мере того, как мы будем требовать от системы новых решений, они будут выводиться на экран одно за другим до тех пор, пока все они не будут найдены. Ответы выводятся следующим образом:

X = пам

Y = боб;

X = том

Y = боб;

X = том

Y = лиз;

. . .

Мы можем остановить поток решений, набрав, например, точку вместо точки с запятой (выбор конкретного символа зависит от реализации).

Нашей программе можно задавать и еще более сложные вопросы, скажем, кто является родителем родителя Джима? Поскольку в нашей программе прямо не сказано, что представляет собой отношение родительродителя, такой вопрос следует задавать в два этапа, как это показано на рис. 1.2.

(1) Кто родитель Джима? Предположим, что это некоторый Y.

(2) Кто родитель Y? Предположим, что это некоторый X.

Такой составной вопрос на Прологе записывается в виде последовательности двух простых вопросов:

?- родитель( Y, джим), родитель( X, Y).

Ответ будет:

X = боб

Y = пат

Рис. 1. 2. Отношение родительродителя, выраженное через композицию двух отношений родитель.

Наш составной вопрос можно интерпретировать и так: "Найти X и Y, удовлетворяющие следующим двум требованиям":

родитель ( Y, джим) и родитель( X, У)

Если мы поменяем порядок этих двух требований, то логический смысл останется прежним:

родитель ( X, Y) и родитель ( Y, джим)

Этот вопрос можно задать нашей пролог-системе и в такой форме:

?- родитель( X, Y), родитель( Y, джим).

При этом результат будет тем же. Таким же образом можно спросить: "Кто внуки Тома?"

?- родитель( том, X), родитель( X, Y).

Система ответит так:

X = боб

Y = энн;

X = боб

Y = пат

Следующим вопросом мог бы быть такой: "Есть ли у Энн и Пат общий родитель?" Его тоже можно выразить в два этапа:

(1) Какой X является родителем Энн?

(2) Является ли (тот же) X родителем Пат?

Соответствующий запрос к пролог-системе будет тогда выглядеть так:

?- родитель( X, энн), родитель( X, пат).

Ответ:

X = боб

Наша программа-пример помогла проиллюстрировать некоторые важные моменты:

На Прологе легко определить отношение, подобное отношению родитель, указав n– ку объектов, для которых это отношение выполняется.

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

Белые погоны

Лисина Александра
3. Гибрид
Фантастика:
фэнтези
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Белые погоны

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

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

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

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

Мастер порталов

Лисина Александра
8. Гибрид
Фантастика:
боевая фантастика
попаданцы
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Мастер порталов

Пророчество

Горъ Василий
1. Пророчество
Фантастика:
фэнтези
8.83
рейтинг книги
Пророчество

Ожерелье Странника

Хаггард Генри Райдер
Приключения:
исторические приключения
7.50
рейтинг книги
Ожерелье Странника

Невольничий караван

Май Карл Фридрих
Приключения:
прочие приключения
6.83
рейтинг книги
Невольничий караван

Я снова не бог. Книга XXXVIII

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

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

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

Варторн: Воскрешение

Асприн Роберт Линн
1. Варторн
Фантастика:
фэнтези
7.50
рейтинг книги
Варторн: Воскрешение

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

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

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

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

Тихие ночи

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

Неучтенный элемент. Том 5

NikL
5. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 5