Функторы и доменные структуры




Лабораторная работа №5

Тема: использование составных объектов.

Цель: уметь использовать составные объекты в программе.

 

.

 

 

Теоретические сведения.

 

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

 

owner("Mary","Garfield").

/* У Мери есть Гарфильд */

 

Первый объект Mary имеет простую структуру; он представляет сам себя. То же можно сказать и про объект Garfield. Любой объект, представляющий сам себя, называется простым объектом. Аналогично, структура, состоящая из простых объектов, называется простой структурой. Утверждение owner отражает тот факт, что Mary обладает Garfield, который может быть либо именем домашнего животного Mary, либо названием книги. Для разделения этих случаев утверждение можно записать в форме, более определенно описывающей объект:

 

owner("Mary",pet("Garfield")).

/* У Мери есть любимец - Гарфильд */

owner("Mary",book("Garfield")).

/* У Мери есть книга - "Гарфильд" */

 

Объект, представляющий другой объект или совокупность объектов, называется составным объектом. Записанные же таким образом предикаты owner называются составными структурами, поскольку они скомпонованы из составных объектов. В данном примере pet представляет Garfield в первом утверждении, в то время как book - во втором, здесь pet и book являются составными объектами. Отметим, что объекты, которые они представляют, заключены в скобки.

Утверждение

 

likes("Tom",apples,orange,banana).

 

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

 

Fruits(apples,orange,banana).

 

В результате появляется составной объект, который поясняет отношение:

 

likes("Tom",fruits(apples,orange,banana)).

 

Терм fruits в этом утверждении называется функтором. Функтор является первым термом составного объекта. Функтор составного объекта есть на самом деле предикат, хотя он и вставлен внутрь другого предиката. Главным функтором здесь

является предикат likes.

Для облегчения написания утверждений и предикатов в данной форме Пролог позволяет объявлять составные объекты в разделе domains. Для настоящего примера описаниями будут служить

Domains

personal_liking = fruits(type1,type2,type3)

type1,type2,type3 = symbol

 

Имя домена personal_liking является именем составного объекта, образованного при помощи функтора fruits. Имя fruits представляет одновременно составной объект и функтор.

Если объекты структуры принадлежат к одному и тому же типу доменов, то этот объект называется однодоменной структурой. Структура с объектами apples, peaches и oranges (все типа symbol), является однодоменной структурой.

Если структура содержит объекты разных типов, она называется многодоменной структурой. Примером тому совокупность объектов apples,r и 16. Здесь apples имеет тип symbol, r - тип char, 16 - тип integer. Таким образом составной объект является определенной структурой доменов. Каждая структура предполагает особое представление фактов в базе данных.

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

 

 

Функторы и доменные структуры

 

Программа "Библиотека" (листинг 1) демонстрирует использование доменной структуры с именем personal_library.

Эта структура содержит сведения о книгах из личных собраний.

 

Листинг 1

domains

 

personal_library = book(title,author,publisher,year)

/* персональная библиотека = книга(название,автор,

издательство,год издания) */

collector,title,author,publisher = symbol

year = integer

 

predicates

 

collection(collector,personal_library)

/* коллекция (имя коллекционера, библиотека) */

 

clauses

 

collection(kahn,

book("The Computer and the Brain",

"von Neumann",

"Yale University Press",1958)).

collection(kahn,

book("Symbolic Logic",

"Lewis Carroll",

"Dower Publications",1958)).

collection(johnson,

book("Database: A Primer",

"C.J.Date",

"Addison-Wesley",1983)).

collection(johnson,

book("Problem-Solving Methods in AI",

"Nils Nilsson",

"McGraw Hill",1971)).

collection(smith,

book("Alice in Wonderland",

"Lewis Carroll",

"The New American Library",1960)).

collection(smith,

book("Fables of Aesop",

"Aesop-Calder",

"Dover Publications",1967)).

 

/***** конец программы *****/

 

 

Функтор структуры personal_library имеет имя book. Описание таково:

 

personal_library = book(title,author,publisher,year)

collector,title,author,publisher = symbol

year = integer

 

Предикат, использующий эту структуру, определяется так:

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: