Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек.9 Языки предст. знаний.doc
Скачиваний:
51
Добавлен:
19.05.2015
Размер:
94.21 Кб
Скачать

I. Терм.

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

дата(‘четверг’,22,'март’,1998)

функтор

компоненты

Такой терм называется структурированным или просто структурой. Структура состоит из функтора, и последовательности компонентов. Функтор - имя отношения, компоненты - объекты отношения. Размерность структуры равна числу компонентов, входящих в нее.

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

В Прологе используется три вида компонент. Два из них являются константами, это атомные константы и числовые константы. Третий вид компонент – это переменные

1) Атомными константами в приведенном примере являются первый и третий компоненты структуры. Атом может содержать любой алфавитно-цифровой знак и должен заключаться в апострофы.

Примеры атомов: 'моя мать' 'Иван, да, Марья' '_ первый' 'Георгий'

2) Числовые константы или просто числа.

Примеры: 205 -10 3.75

3)Переменные.

Примеры: A,B,R

II. Полноценная программа.

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

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

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

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

военный ('Павлов' 'генерал').

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

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

В программе каждый военный представляется структурой, имеющей функтор военный и размерность 2. Компоненты структур являются атомами. Первый представляет фамилию военнослужащего, а второй - его звание. Точка, стоящая в конце записи структуры говорит о том, что данная структура является фактом.

Дополним нашу программу другими фактами:

военный ('Павлов' 'генерал').

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

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

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

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

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

военный ('Дмитриев' 'лейтенант').

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

военный ('Дарьин', ‘майор').

Теперь можно задавать вопросы. Вопрос, часто называемый целью, имеет форму структуры, перед которой ставится символы ?- , а после структуры ставится точка.

Пример вопроса:

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

Данный вопрос означает "Имеет ли военнослужащий Тихонов звание сержанта".

Пролог сопоставляет структуру вопроса с имеющимися фактами. Если сопоставление найдено, Пролог выдает ответ "да", если же ни одного сопоставления не найдено выдается ответ "нет". Таким образом, ответом на наш вопрос является "да".

Если мы зададим вопрос:

?- военный ('Климов', 'капитан ').

то получим ответ:

"нет"

Или зададим другой вопрос:

?- военный('Давыдов', 'генерал').

Будет дан ответ "нет", потому что в программе нет никаких сведений о военнослужащем по фамилии Давыдов.

Вопрос может содержать в качестве компонентов переменные.

Пример вопроса, содержащего переменную:

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

Этот вопрос можно интерпретировать следующим образом:

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

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

Ответом на вопрос будет:

R = капитан

Допустим, мы хотим узнать: "Какие военнослужащие имеют звание полковника?"

Вопрос на Прологе формулируется так:

?-военный(S, 'полковник' ).

Пролог даст ответы:

S = Климов

S = Максимов

Наша программа может быть использована для ответа на более сложные вопросы:

"Имеют ли Абрамов и Федоров одинаковые звания?"

Для этого перефразируем наш вопрос:

"Какое звание у Абрамова и имеет ли Федоров то же звание?"

Вопрос на Прологе выражается следующим образом:

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

Ответ: R = капитан