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

III. Правило сопоставления структур.

Существует правило сопоставления двух структур.

Две структуры сопоставляются, если:

-они имеют один и тот же функтор;

-они имеют одинаковую размерность;

-компоненты на одинаковых позициях обеих структур сопоставляются.

Две компоненты сопоставляются, если:

-обе являются переменными;

-одна из них переменная;

-обе являются структурами и эти структуры сопоставляются

Пример 1.

Будут ли сопоставляться структуры:

оркестр ('струйные', B,C,D) и

оркестр ('струйные', 'духовые', 'ударные', 'клавишные').

Проверяем каждое из трех требований. Обе структуры имеют одинаковый функтор - оркестр и одинаковую размерность 4. Теперь мы должны сопоставить компоненты на одинаковых позициях. Первые компоненты - одинаковые атомы - струнные. При рассмотрении вторых компонент значение - духовые замещает переменную B в первой структуре. Аналогично дело обстоит и с третьими компонентами. Таким образом, мы можем заключить, что структуры сопоставляются.

Пример 2.

Будут ли сопоставляться структуры:

комплектующие (станок ('патрон'), робот ('захватное устройство'))

комплектующие (Оборудование, Оборудование)

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

IV. Рекурсия в структурах.

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

Военный (‘рядовой’, ’генерал’).

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

“Кто служит в данном, воинском подразделении и какое звание у этого военнослужащего?”,

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

?-военный (А, В).

Для генерала Рядового ответом на него будет:

А = Рядовой

В = генерал

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

военный (фамилия (‘Рядовой’), звание(‘генерал’)).

при ответе на вопрос:

?- военный (А, В).

Пролог выдаст более корректный ответ:

A= фамилия (‘Рядовой’)

В = звание (‘генерал’)

Перепишем нашу программу, так как это было предложено для генерала Рядового:

военный (фамилия ('Павлов'), звание ('генерал')).

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

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

военный (фамилия ('Тихонов') звание ('сержант')).

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

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

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

военный (фамилия ('Федоров'), звание ('капитан')).

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