Запросы с переменными

Переменная – это вид терма, который записывается как слово, начинающееся с большой латинской буквы.

Пример 5.

? − знает (оля, X).

означает: “ Кого знает Оля?

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

Этот запрос будет истинным, если такое лицо будет найдено в текущей базе данных “ знает ”.

Интерпретатор пытается согласовать аргументы запроса с аргументами фактов, входящих в базу данных “ знает ”.

В рассматриваемом случае запрос окажется успешным при сопоставлении запроса с первым же фактом, поскольку атом “ оля ” в запросе унифицируется с атомом “ оля ” в факте, а переменная X унифицируется с атомом “ витя ”, входящем в факт. В результате переменная X примет значение “ витя ” и интерпретатор ответит:

X = витя.

Составной запрос образуется из нескольких простых запросов, соединенных между собой символом “,” (запятая), что означает “ и ” или символом “;” (точка с запятой), что означает “ или ”. Каждый простой запрос, входящий в составной, называется “ подцелью ”. Истинность составного запроса зависит от истинности подцелей.

Пример 6.

?- знает (оля, A), знает (коля, A).

Данный запрос соответствует вопросу: “ Есть ли такой человек, которого знают одновременно и Оля и Коля? ”. Одна и та же переменная A входит в обе подцели этого запроса, а это означает, что для истинности всего составного запроса вторые аргументы обеих подцелей должны принимать одно и то же значение. Интерпретатор ответит:

A = витя,

Первый ответ A = витя, показывает, что Витю одновременно знают и Оля и Коля. Второй ответ no свидетельствует, что Витя – единственный общий знакомый.

Символ подчеркивания _ выступает в качестве анонимной переменной, которая предписывает интерпретатору проигнорировать значение аргумента. Анонимная переменная унифицируется с чем угодно, но не обеспечивает выдачу выходных данных.

Пример 7.

В результате запроса:

?− знает(B, _).

будут выданы все возможные значения первого аргумента предиката “ знает ”, вне зависимости от того, какие значения будет принимать второй аргумент:

B = оля,

В = коля,

В = коля,

no

Правила

Правило – это факт, значение истинности которого зависит от истинных значений условий, образующих тело правила.

Форма записи правила:

заголовок:- тело.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: