Одним из видов термов является структура. Структура - это единый объект (отношение), состоящий из совокупности других объектов (отношений), называемых компонентами. Компоненты группируются в структуру для удобства их использования. Структуру следует рассматривать как средство описания сложного составного объекта или сложного отношения. Например:
'студент'('фио'('Петров','Иван','Ильич'),'дата_рождения'(6,03,1972)).
Здесь в структуру 'студент' объединены два объекта:
'фио'(<фамилия>,<имя>,<отчество>)
'дата_рождения'(<день>,<месяц>,<год>).
В реальной жизни одним из примеров структур является личная карточка студента в деканате, карточка-указатель для библиотечной книги. Например:
'книга'(621026,'автор'('Вигдорчик','Г_В'),
'название'('Основы_программирования_для_СМ_ЭВМ'),
'издательство'('Москва','Финансы_и_статистика'),
'год_издания'(1987)).
Карточка-указатель содержит несколько компонентов: инвентарный номер 621026, сведения об авторе, название книги, дату издания, место издания и т.д. Некоторые из компонентов в свою очередь тоже можно разбить на компоненты. Например, сведения об авторе состоят из фамилии и инициалов, сведения об издательстве - из места издания и названия издательства.
Структура записывается на Прологе с помощью ее функтора (имени структуры ) и компонентов.
<функтор – имя структуры>(<список аргументов - компонентов>).
Компоненты (их не более 255) заключаются в круглые скобки и разделяются запятыми. Функтор (имя структуры) записывается перед открывающей круглой скобкой. Компонентами могут быть любые термы: константы, переменные и в свою очередь структуры.
Например, в структуре:
'любит'(Х,'баскетбол','член_клуба'('ДОСААФ')).
'любит' - функтор, Х - переменная, 'баскетбол' - константа, 'член_клуба'('ДОСААФ') - структура с функтором 'член_клуба'.
Чтобы легче было понять сложную структуру, ее обычно представляют в виде дерева. Каждая ветвь может указывать на другую структуру, например:
'книга'('Анна_Каренина','автор'('Лев','Николаевич','Толстой')).
Две структуры равны, если они имеют один и тот же функтор и одинаковое число аргументов, причем все соответствующие аргументы равны. Например, при согласовании следующего целевого утверждения:
?-'ехать'('Андрей','велосипед')='ехать'('Андрей',Х).
X будет присвоено конкретное значение 'велосипед'.
Структуры могут быть вложены одна в другую на любую глубину. Попытка согласовать следующую цель:
?-'станок'('вал',Х,'деталь'('гайка',F,'операция'('обтачка','резец',J)))='станок'(В,43,'деталь'(G,MXII,'операция'(H,'резец','полная'))).
будет успешной, а переменные B,X,G,F,H,J будут конкретизированы и примут значения 'вал', 43, 'гайка', 'MXII' , 'обтачка', 'полная'.
|