Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7 - Основы языка пролог.docx
Скачиваний:
7
Добавлен:
07.12.2018
Размер:
55.18 Кб
Скачать

1989 - Компоненты структуры

Размерность структуры - четыре. Синтаксис Пролога требует следующего:

♦ Компоненты структуры заключаются в скобки.

♦ Компоненты разделяются запятой ",".

♦ Между функтором и левой скобкой, вслед за которой следуют компоненты, нет никакого пробела.

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

"Структура представляет собой дату. Четыре ее компонента представляют день недели, на который приходится эта дата, число, месяц и год."

Рекомендовать выбирать такие имена для функтора и компонентов, которые подсказывали бы человеку, читающему программу, как интерпретируется данная структура.

В приведенном примере первый и третий компоненты структуры являются атомными константами и обычно называются просто атомами. Атом - это еще один вид терма. Атом может содержать любой знак, но если атом содержит что-либо отличное от алфавитно-цифровых знаков и знака подчеркивания "_", он должен быть заключен в апострофы - одиночные кавычки. То же относится и к атомам, которые начинаются с заглавной буквы, цифры или знака "_". Например:

'моя мать' 'иван,да,марья' '205' '.первый' 'Георгий'

Все они не будут атомами, если кавычки убрать.

Другим видом константы является числовая константа, которую обычно называют просто числом.

Пример:

Пролог-программа будет содержать информацию о военнослужащих некоторого воинского подразделения и их званиях:

"Павлов генерал."

"Климов полковник."

"Максимов полковник."

В программе каждого военного мы представляем структурой с функтором военный и размерностью 2. Каждый компонент - атом, первый представляет фамилию военнослужащего данного воинского подразделения, а второй - звание. При записи нашей программы желательно было бы допустить, чтобы отношения этого типа в действительности имели место для военнослужащих данного воинского подразделения. Допустив это, мы запишем в нашу программу структуру, выражающую отношение, как некоторый факт. Каждый факт заканчивается точкой ".":

военный(павлов, генерал).

военный(климов, полковник).

военный(максимов, полковник).

Факт - это одна из форм использования структуры в Прологе. Простая программа состоит из ряда фактов.

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

Далее для демонстрации функционирования Пролога мы будем ссылаться на следующую программу, описывающую некоторый фрагмент базы данных о воинском подразделении:

военный(павлов, генерал).

военный(климов, полковник).

военный(максимов, полковник).

военный(тихонов, сержант).

военный(николаев, сержант).

военный(абрамов, капитан).

военный(дмитриев, лейтенант).

военный(федоров, капитан).

военный(дарьин, майор).

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

Вопрос имеет форму структуры, перед которой ставится символ ?-, а вслед за ней ставится символ завершения - точка. Пример вопроса:

?- военный(тихонов, сержант).

Согласно принятой нами интерпретации смысла структур с функтором военный и размерностью 2 данный вопрос означает:

"Имеет ли военнослужащий Тихонов звание сержанта?"

Структура, используемая как вопрос, представляет собой цель, пользователь обращается к Прологу с просьбой согласовать ее. Структура, представляющая собой цель, сопоставляется со структурой, представляющей собой факт в программе. Второй вариант согласования цели требует использования правил. Пролог распознает любое сопоставление цели с фактом в программе. Если сопоставление найдено, Пролог выдает ответ:

да

Он указывает на то, что цель согласована. Если же ни одного сопоставления не найдено, ответ:

нет

Цель может содержать переменные в качестве компонентов структуры. Переменная представляет собой некоторое "забронированное" место, обозначающее неконкретизированную величину, которую Пролог должен конкретизировать, "заполняя" это место. Переменная записывается, начиная с прописной буквы или со знака подчеркивания "_". Пример цели, содержащей переменную:

?- военный(абрамов, R).

Эту цель можно интерпретировать как вопрос:

"Для какого значения R будет истинным то, что военнослужащий Абрамов имеет звание R?"

или на обычном языке:

"В каком звании Абрамов?"

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

R = капитан

Мы можем попросить Пролог перечислить все возможные значения переменных, входящих в цель. В большинстве Пролог-систем пользователь может сделать это вводом знака ";" после первого ответа.

Если альтернативные ответы существуют, Пролог выдаст другие значения переменных. Если альтернатив нет, ответом будет нет - как и для цели, попытка согласовать которую неудачна. Например, мы хотим узнать: