- •Основы языка Пролог: атом, переменная, функтор, предикат, терм, литерал, дизъюнкт. Структура Пролог-программы: факты, правила, цель. Редактор и интерпретатор.
- •B, abcXyz, x_123, efg_hij, коля, слесарь, 'Это также атом Пролога',
- •1989 - Компоненты структуры
- •"Какие военнослужащие имеют звание полковника?"
- •"Имеют ли Абрамов и Федоров одинаковые звания?"
- •"Какое звание у Абрамова и, если обозначить звание Абрамова r, имеет ли Федоров то же звание r?"
1989 - Компоненты структуры
Размерность структуры - четыре. Синтаксис Пролога требует следующего:
♦ Компоненты структуры заключаются в скобки.
♦ Компоненты разделяются запятой ",".
♦ Между функтором и левой скобкой, вслед за которой следуют компоненты, нет никакого пробела.
Важно понимать, что имена, которые выбираются для функтора и компонентов структуры, произвольны и не должны иметь никакого особого значения внутри языка. Когда структура используется для представления отношения, необходимо установить, как эта структура должна быть интерпретирована. В данном примере интерпретация структуры такова:
"Структура представляет собой дату. Четыре ее компонента представляют день недели, на который приходится эта дата, число, месяц и год."
Рекомендовать выбирать такие имена для функтора и компонентов, которые подсказывали бы человеку, читающему программу, как интерпретируется данная структура.
В приведенном примере первый и третий компоненты структуры являются атомными константами и обычно называются просто атомами. Атом - это еще один вид терма. Атом может содержать любой знак, но если атом содержит что-либо отличное от алфавитно-цифровых знаков и знака подчеркивания "_", он должен быть заключен в апострофы - одиночные кавычки. То же относится и к атомам, которые начинаются с заглавной буквы, цифры или знака "_". Например:
'моя мать' 'иван,да,марья' '205' '.первый' 'Георгий'
Все они не будут атомами, если кавычки убрать.
Другим видом константы является числовая константа, которую обычно называют просто числом.
Пример:
Пролог-программа будет содержать информацию о военнослужащих некоторого воинского подразделения и их званиях:
"Павлов генерал."
"Климов полковник."
"Максимов полковник."
В программе каждого военного мы представляем структурой с функтором военный и размерностью 2. Каждый компонент - атом, первый представляет фамилию военнослужащего данного воинского подразделения, а второй - звание. При записи нашей программы желательно было бы допустить, чтобы отношения этого типа в действительности имели место для военнослужащих данного воинского подразделения. Допустив это, мы запишем в нашу программу структуру, выражающую отношение, как некоторый факт. Каждый факт заканчивается точкой ".":
военный(павлов, генерал).
военный(климов, полковник).
военный(максимов, полковник).
Факт - это одна из форм использования структуры в Прологе. Простая программа состоит из ряда фактов.
В большинстве реализаций Пролога программа создается вне Пролог-системы, при этом используется некоторый текстовый редактор как часть операционной системы компьютера. Затем дается команда на запуск Пролог-системы, вслед за которой ей дается команда на загрузку предварительно созданной программы.
Далее для демонстрации функционирования Пролога мы будем ссылаться на следующую программу, описывающую некоторый фрагмент базы данных о воинском подразделении:
военный(павлов, генерал).
военный(климов, полковник).
военный(максимов, полковник).
военный(тихонов, сержант).
военный(николаев, сержант).
военный(абрамов, капитан).
военный(дмитриев, лейтенант).
военный(федоров, капитан).
военный(дарьин, майор).
После того, как программа загружена, можно задавать вопросы относительно тех отношений, которые в ней описаны.
Вопрос имеет форму структуры, перед которой ставится символ ?-, а вслед за ней ставится символ завершения - точка. Пример вопроса:
?- военный(тихонов, сержант).
Согласно принятой нами интерпретации смысла структур с функтором военный и размерностью 2 данный вопрос означает:
"Имеет ли военнослужащий Тихонов звание сержанта?"
Структура, используемая как вопрос, представляет собой цель, пользователь обращается к Прологу с просьбой согласовать ее. Структура, представляющая собой цель, сопоставляется со структурой, представляющей собой факт в программе. Второй вариант согласования цели требует использования правил. Пролог распознает любое сопоставление цели с фактом в программе. Если сопоставление найдено, Пролог выдает ответ:
да
Он указывает на то, что цель согласована. Если же ни одного сопоставления не найдено, ответ:
нет
Цель может содержать переменные в качестве компонентов структуры. Переменная представляет собой некоторое "забронированное" место, обозначающее неконкретизированную величину, которую Пролог должен конкретизировать, "заполняя" это место. Переменная записывается, начиная с прописной буквы или со знака подчеркивания "_". Пример цели, содержащей переменную:
?- военный(абрамов, R).
Эту цель можно интерпретировать как вопрос:
"Для какого значения R будет истинным то, что военнослужащий Абрамов имеет звание R?"
или на обычном языке:
"В каком звании Абрамов?"
После того как цель, содержащая переменные, будет согласована, Пролог выдаст значения, которыми будут заменены переменные, входящие в цель. Так, ответом на наш вопрос будет:
R = капитан
Мы можем попросить Пролог перечислить все возможные значения переменных, входящих в цель. В большинстве Пролог-систем пользователь может сделать это вводом знака ";" после первого ответа.
Если альтернативные ответы существуют, Пролог выдаст другие значения переменных. Если альтернатив нет, ответом будет нет - как и для цели, попытка согласовать которую неудачна. Например, мы хотим узнать: