русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Использование составных термов


Дата добавления: 2013-12-23; просмотров: 1918; Нарушение авторских прав


В Прологе функциональный терм или предикат можно рассматривать как структуру данных, подобную записи в языке Паскаль. Терм, представляющий совокупность термов, называется составным термом или структурой. Составные структуры данных в Прологе объявляются в разделе domains. Если термы структуры относятся к одному и тому же типу доменов, то этот объект называется однодоменной структурой данных. Если термы структуры относятся к разным типам доменов, то такая структура данных называется многодоменной структурой данных. Использование доменной структуры упрощает структуру предиката.

Аргументами составного терма данных могут быть простые типы данных, составные термы или списки.

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

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

Пример 24: Необходимо создать БД, содержащую сведения о книгах из личной библиотеки. Зададим составной терм с именем personal_library, имеющим следующую структуру: personal_library= book (title, author, publisher, year), и предикат collection (collector, personal_library). Терм book называется функтором структуры данных. Пример программы, использующей составные термы для описания личной библиотеки, и поиска информации о владельцах книг и книгах, напечатанных в 1990 году, а также книги, изданной позже всех остальных, выглядит следующим образом:

domains

collector, title, author, publisher = symbol

year = integer

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



predicates

collection (collector, personal_library)

q1(year)

q2

facts

dq1(collector, title, year)

max_year(title, author, year)

clauses

collection (irina, book («Using Turbo Prolog», «Yin with Solomon», «Moscow, World», 1993)).

collection (irina, book («Логическое программирование и Visual Prolog», «А.Адаменко, А.Кучуков», «Санкт-Петрбург, БХВ- Петрбург», 2003)).

collection (petr, book («The art of Prolog», «Sterling with Shapiro», »Moscow, World», 1990)).

collection (anna, book («Prolog: a relation language and its applications», «John Malpas», »Moscow, Science», 1990)).

%q1(Y):- collection (C, book( T,_, _, Y), write(C,’ ‘,T,’ ‘, Y), nl, fail.

q1(Y):- dq1(C, T, Y), write(‘*’,C,’ ‘,T,’ ‘, Y), nl, fail.

q1(Y):- not(dq1(_,_,Y)), collection (C, book( T,_, _, Y), assert(dq1(C,T.Y)), write(X,’ ‘,T,’ ‘, Y), nl, fail.

max_year(a, b, 0).

q2:- collection (_, book(T,A, _, Y), max_year(T1,A1,Y1),Y>Y1, retract(max_year(T1,A1,Y1)), assert(max_year(T,A,Y)), fail.

Goal

%q1(1990).

%q1(1990);q1(1990).

q2;(max_year(T,A,Y).

В данном случае переменная Y используется для унификации части составного терма.Если цель задать в виде:

collection (X, Z),Z=book( Y,_, _, 1990), то простая переменная Z унифицируется с сотавным термом book.

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

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

domains

person, title, author, artist, album, type = symbol

thing = book (title, author); record (artist, album, type)

predicates

owns (person, thing)

clauses

owns (irina, book («Using Turbo Prolog», «Yin with Solomon»)).

owns (petr, book («The art of Prolog», «Sterling with Shapiro»)).

owns (anna, book («Prolog: a relation language and its applications», «John Malpas»)).

owns (irina, record («Elton John», «Ice Fair», «popular»)).

owns (petr, record («Benny Goodman», «The King of Swing», »jazz»)).

owns (anna record («Madonna», «Madonna», «popular»»)).

goal

owns (X, record(_, _, «jazz»)

Visual Prolog позволяет конструировать многоуровневые составные термы. Например, в терме record («Elton John», «Ice Fair», «popular») вместо фамилии артиста можно использовать новую структуру, которая будет описывать артиста более детально:

artist=art(family,name),

family,name=symbol,

при этом терм будет выглядеть следующим образом: record (art(“Elton”,”John”),«Ice Fair», «popular»).



<== предыдущая лекция | следующая лекция ==>
Структура программ Пролога | Использование списков


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.051 сек.