
?-дарить(коля,лена,книга(Автор,Название).
;
Какую книгу (какого автора и с каким
;
названием) подарил Коля Лене?
Автор=дюма,
Название=
три_мушкетера
;
НЕТ
Из приведенных примеров видно, что интерпретатор Пролога возвращает
интересующие нас подробности через значения переменных. Обратите внимание, что
после получения первого ответа на вопрос, необходимо ввести символ
";"
(точка с
запятой), который в стандартном Прологе означает продолжение поиска. После вывода
всех возможных решений, ответом Пролога является "НЕТ", что в данном случае
означает лишь, что все возможные решения исчерпаны. Ввод символа, отличного от
точки с запятой, прекращает дальнейший поиск решений. Некоторые диалекты
Пролога,
в частности Турбо-Пролог, при задании вопроса сразу выводят все возможные
ответы.
Синтаксически переменные определяются как идентификаторы, начинающиеся с
заглавной буквы Кроме этого, переменными являются
идентификаторы,
начинающиеся с
символа-
подчеркивания, например,
"_кто",
"_х"
и т.д. При
согласовании аргументов, являющихся переменными, возможно несколько случаев,
рассмотрение которых позволяет полностью сформулировать правила согласования
цели с утверждением базы.
• Переменные величины могут иметь значение, в этом случае, они называются
связанными. Переменные, которым не присвоено никакое значение,
называются свободными.
• Перед началом согласования цели и утверждения базы все переменные
свободны
• Если свободная переменная согласовывается с числом, Символьным атомом
или структурой, то этой переменной присваивается соответствующее
значение, и она при дальнейшем согласовании становится связанной.
• При согласовании связанной переменной она заменяется своим значением.
• Если одна переменная свободная, а другая связанная, то свободной
переменной присваивается значение связанной.
• При согласовании связанной переменной с константой выполняется проверка
на равенство. Таким образом, согласование переменных объединяет вместе
как операцию присваивания (':=' в Паскале), так и операцию сравнения
('-
в
Паскале).
95