Выборка структурированной информации из базы данных

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

Любую базу данных можно естественным образом представить на языке Prolog в виде множества фактов. Например, базу данных о семьях можно представить таким образом, что для описания каждой семьи будет применяться одно предложение. На рис. 4.1 показано, каким способом может быть структурирована информация о каж­дой семье. Каждая семья имеет три составляющих: муж, жена и дети. Поскольку в разных семьях имеется различное количество детей, информация о детях представ­лена в виде списка, который позволяет включать в него любое количество элементов. Информация о каждом человеке, в свою очередь, представлена в виде структуры, со­стоящей из четырех компонентов: имя, фамилия, дата рождения, место работы. Ин­формация о месте работы может содержать слово "unemployed" (безработный) или указывать организацию, в которой работает данное лицо, и заработную плату. Ин-

формацию о семье, представленную на рис. 4.1, можно записать в базу данных с по­мощью следующего предложения:

family(

person [ torn, fox, date(7,may,1960) , works (fabc, 15200)), person! arm, foxr date [9,may, 1961) , unemployed), [ person! pat, fox, date ! 5, may, 1983 >, unemployed), person С Jim, fox, date[S,mav, 1983), unemployed) ]).

family

выборка структурированной информации из базы данных - student2.ru pereon
turn fox date works aim fox date imnmplnyod parson

УГ\ A /l\ /7T\ \

7 may 1960 bbc 15200 9 may 19Б1 pal fox dale unemployed person []

/l\ //W

5 may 1983 loxdale unemployed

//\

5 may 1983 Рис. 4.1. Пример структурного представления информации о семье

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

Prolog фактически является языком, который очень хорошо приспособлен для выборки требуемой информации из подобной базы данных. Замечательным свойст­вом этого языка является то, что он позволяет ссылаться на объекты, фактически не задавая все компоненты этих объектов. Prolog предоставляет возможность указывать структуру интересующих нас объектов и оставлять конкретные компоненты в этой структуре не заданными или заданными лишь частично. Некоторые примеры этого приведены на рис. 4.2. В частности, можно указать все семьи Армстронг с помощью следующего терма: family ( person (_, armstrong,_, J , _, _)

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

;)
[ ,

family(

Чтобы найти всех замужних женщин, имеющих по меньшей мере трех детей, можно сформировать такой вопрос:

?- family [ _, person( Name, Surname, _, _) , [_,_,_!_] Ь

Из этих примеров следует вывод, что интересующие нас объекты можно опреде­лять не только по их содержимому, но и путем указания их структуры. Достаточно обозначить структуру этих объектов и оставить их параметры в виде незаполненных ячеек.

Кроме того, существует возможность предусмотреть набор процедур, которые бу­дут служить в качестве утилит, позволяющих повысить удобство взаимодействия с базой данных. Подобные вспомогательные процедуры могут стать частью пользова­тельского интерфейса. Некоторые полезные вспомогательные процедуры для рас­сматриваемой базы данных приведены ниже.

Глава 4. Использование структур: примеры программ



husband { X) -.- % X family(X,_, _ ) .

муж

wife £ X) :- i К - жена family(_, X, _ ) .

child ( X) :- \ X - ребенок

family! _, _, Children),

member( X, Children). % X задан в списке Children

exists { Person) :- % Любой человек, описшныВ базе данных husband! Person)


 

wife( Person) Child! Person). dateofbirth ( person[ salaryt person ( _/_,. salary 1 person! _,_,

Date, _), Date). works [ _, S) ) , S ). I Заработок работающего лица unemployed), 0). % Заработок безработного лица



Family

Ж)

Femily



выборка структурированной информации из базы данных - student2.ru

Person

/ \

— armstrong

Family

Наши рекомендации