Переменная – это вид терма, который записывается как слово, начинающееся с большой латинской буквы.
Пример 5.
? − знает (оля, X).
означает: “ Кого знает Оля? ”
В запросе, содержащем переменную, неявно спрашивается о том, существует ли хотя бы одно значение этой переменной, при котором запрос будет истинным. Приведенный запрос можно прочесть так: “ Существует ли хотя бы один человек, которого знает Оля? ”
Этот запрос будет истинным, если такое лицо будет найдено в текущей базе данных “ знает ”.
Интерпретатор пытается согласовать аргументы запроса с аргументами фактов, входящих в базу данных “ знает ”.
В рассматриваемом случае запрос окажется успешным при сопоставлении запроса с первым же фактом, поскольку атом “ оля ” в запросе унифицируется с атомом “ оля ” в факте, а переменная X унифицируется с атомом “ витя ”, входящем в факт. В результате переменная X примет значение “ витя ” и интерпретатор ответит:
X = витя.
Составной запрос образуется из нескольких простых запросов, соединенных между собой символом “,” (запятая), что означает “ и ” или символом “;” (точка с запятой), что означает “ или ”. Каждый простой запрос, входящий в составной, называется “ подцелью ”. Истинность составного запроса зависит от истинности подцелей.
|
|
Пример 6.
?- знает (оля, A), знает (коля, A).
Данный запрос соответствует вопросу: “ Есть ли такой человек, которого знают одновременно и Оля и Коля? ”. Одна и та же переменная A входит в обе подцели этого запроса, а это означает, что для истинности всего составного запроса вторые аргументы обеих подцелей должны принимать одно и то же значение. Интерпретатор ответит:
A = витя,
nо
Первый ответ A = витя, показывает, что Витю одновременно знают и Оля и Коля. Второй ответ no свидетельствует, что Витя – единственный общий знакомый.
Символ подчеркивания _ выступает в качестве анонимной переменной, которая предписывает интерпретатору проигнорировать значение аргумента. Анонимная переменная унифицируется с чем угодно, но не обеспечивает выдачу выходных данных.
Пример 7.
В результате запроса:
?− знает(B, _).
будут выданы все возможные значения первого аргумента предиката “ знает ”, вне зависимости от того, какие значения будет принимать второй аргумент:
B = оля,
В = коля,
В = коля,
no
Правила
Правило – это факт, значение истинности которого зависит от истинных значений условий, образующих тело правила.
Форма записи правила:
заголовок:- тело.