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

Унификация составных объектов

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

date("April",14,1960)

сопоставляется с х и присваивает х значение date ("April", 14, i960). Также

date("April",14, I960)

сопоставляется с date(Mo, Da, Yr) и присваивает переменным Mo = "April", Da = 14 И Yr = I960.

Visual Prolog осуществляет унификацию в двух случаях. Во-первых, когда цель сопоставляется с заголовком предложений. Во-вторых, через знак равенства (=), который является инфиксным предикатом (предикатом, который расположен между своими аргументами, а не перед ними).

Фактически, Visual Prolog выполняет операцию присваивания для унификации объектов по разные стороны знака равенства. Это свойство полезно для нахождения значений аргументов составного объекта

Составные объекты могут рассматриваться в предложениях Пролога как единые объекты,

Можно использовать первый компонент составного объекта — функтор для распознавания различных объектов.

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

Объявление составных доменов

После компиляции программы, которая содержит следующие отношения:

domains

название,автор = symbol

год_издания,колич_стр = integer

персона=персона(имя_персоны,адрес_персоны)

имя_персоны=имя_персоны(имя,фамилия)

адрес_персоны=адрес_персоны(дом,улица,город)

выбранная_книга=выбранная_книга(состояние,название_книги)

дом=integer

состояние,название_книги,имя,фамилия,улица,город=symbol

predicates

книга(название, автор, год_издания,колич_стр)

предпочтение(имя,фамилия, название)

запись_в_карточке(персона,выбранная_книга)

clauses

книга(«Зарядка для хвоста», «Григории Остер»,1993,86).

книга(«Новая пародия», «Александра Хаут»,1993,72).

книга(«Верхний этаж», «Александр Власов»,1983,147).

книга(«Вини пух», «Аскандер Милн»,1992,201).

книга(«Сказка», «Джонни Радарри»,1992,206).

книга(«Нерв», «Владимир Высоцкий»,1990,206).

предпочтение(«Павел», «Павлов»,«Зарядка для хвоста»).

предпочтение(«Олег», «Сидоров», «Новая пародия»).

предпочтение(«Павел», «Павлов», «Сказка»).

предпочтение(«Олег», «Сидоров», «Новая пародия»).

предпочтение(«Ольга», «Тараканова»,«Зарядка для хвоста»).

запись_в_карточке(персона(имя_персоны(«Павел», «Павлов»,),адрес_персоны(16, «Жилина», «Тольятти»)), выбранная_книга(старая, «Новая пародия»)).

запись_в_карточке(персона(имя_персоны(«Олег», «Сидоров»),адрес_персоны(25, «Мира», «Самара»)), выбранная_книга(новая, «Верхний этаж»)).

запись_в_карточке(персона(имя_персоны(«Ольга», «Тараканова»),адрес_персоны(54, «Мира», «Самара»)), выбранная_книга(новая, «Верхний этаж»)).

goal

запись_в_карточке(персона(имя_персоны(Имя_персоны,Фамилия_персоны),адрес_персоны(_,_,A)), выбранная_книга(«Верхний этаж»,_)),A<>"Тольятти".

V isual Prolog позволяет конструировать составные объекты на нескольких уровнях (рис 9).

Рис. 9. Древовидная структура «запись_в_карточке»