Читаем Prolog полностью

       ?-  родитель( 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-ку объектов, для которых это отношение выполняется.

Пользователь может легко задавать пролог-системе вопросы, касающиеся отношений, определенных в программе.

Пролог-программа состоит из предложений. Каждое предложение заканчивается точкой.

Аргументы отношения могут быть (среди прочего): конкретными объектами, или константами (такими, как том и энн), или

абстрактными объектами, такими, как

X

и

Y

. Объекты первого типа называются

атомами

. Объекты второго типа -

переменными

.

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

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

означает конъюнкцию этих целевых утверждений:

        X  -  родитель Энн   и

        X  -  родитель Пат.

Пролог-система рассматривает вопросы как цели, к достижению которых нужно стремиться.

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

Если на вопрос существует несколько ответов, пролог-система найдет столько из них, сколько пожелает пользователь.

Упражнения

Перейти на страницу:

Похожие книги

12 великих трагедий
12 великих трагедий

Книга «12 великих трагедий» – уникальное издание, позволяющее ознакомиться с самыми знаковыми произведениями в истории мировой драматургии, вышедшими из-под пера выдающихся мастеров жанра.Многие пьесы, включенные в книгу, посвящены реальным историческим персонажам и событиям, однако они творчески переосмыслены и обогащены благодаря оригинальным авторским интерпретациям.Книга включает произведения, созданные со времен греческой античности до начала прошлого века, поэтому внимательные читатели не только насладятся сюжетом пьес, но и увидят основные этапы эволюции драматического и сценаристского искусства.

Александр Николаевич Островский , Иоганн Вольфганг фон Гёте , Оскар Уайльд , Педро Кальдерон , Фридрих Иоганн Кристоф Шиллер

Драматургия / Проза / Зарубежная классическая проза / Европейская старинная литература / Прочая старинная литература / Древние книги
Волчья тропа
Волчья тропа

Мир после ядерной катастрофы. Человечество выжило, но высокие технологии остались в прошлом – цивилизация откатилась назад, во времена Дикого Запада.Своенравная, строптивая Элка была совсем маленькой, когда страшная буря унесла ее в лес. Суровый охотник, приютивший у себя девочку, научил ее всему, что умел сам, – ставить капканы, мастерить ловушки для белок, стрелять из ружья и разделывать дичь.А потом она выросла и узнала страшную тайну, разбившую вдребезги привычную жизнь. И теперь ей остается только одно – бежать далеко на север, на золотые прииски, куда когда-то в поисках счастья ушли ее родители.Это будет долгий, смертельно опасный и трудный путь. Путь во мраке. Путь по Волчьей тропе… Путь, где единственным защитником и другом будет таинственный волк с черной отметиной…

Алексей Семенов , Бет Льюис , Даха Тараторина , Евгения Ляшко , Сергей Васильевич Самаров

Фантастика / Приключения / Боевик / Славянское фэнтези / Прочая старинная литература