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

3.3. Использование структур в Прологе

Списковые структуры помогают решать множество задач, в которых необходима последовательная обработка однотипных данных. Пролог обладает мощными средствами обработки сложных иерархических структур, которые удобно представлять с помощью деревьев(их называют термами или структурами). Для использования структур их надо описать в разделе domains, так как структура – нестандартный тип данных.

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

Пусть знания о семьях можно представить с помощью следующих структур:

Пример программы, использующей данную структуру:

domains

first_name,second_name,place_of_work,month=string

number,year,rate_of_pay=integer

date_of_birthday=date(number,month,year)

inf_about_work= work(place_of_work,rate_of_pay)

member_of_family=member(first_name,second_name, date_of_birthday,

inf_about_work)

list_of_members= member_of_family*

children=childs(list_of_members)

predicates

family(member_of_family, member_of_family, children)

husband(member_of_family)

child(member_of_family)

wife(member_of_family)

exist(member_of_family)

belong(member_of_family, list_of_members)

date_of_birth(member_of_family, date_of_birthday)

income(member_of_family, rate_of_pay)

clauses

family(member(“Roman”,“Kustov”,date(5,“may”,1964),

work(“TRTU”,500)),

member(“Irina”,“ Kustova”,date(10,“may”,1962),

work(“Belii Aist”,1200)),

childs([member(“Vasy”,“Kustov”,date(10,“april”,1982),

work(“net”,0)),

member(“Vera”,“ Kustova”,date(9,“ april”,1989),

work(“net”, 0))])).

husband(X):-

family(X,_,_).

wife(X):-

family(_,X,_).

child(X):-

family(_,_,childs(Y)),

belong(X,Y).

exist(X):-

husband(X);

wife(X);

child(X).

belong(X,[X|T]).

belong(X,[Y|T]):-

belong(X,T).

date_of_birth(member(X,Y,Date,Z),Date):-

exist(member(X,Y,Date,Z)).

Income(member(X,Y,Z,work(U,S)),S):-

exist(member(X,Y,Z,work(U,S))).

3.4 Задания на лабораторную работу №2

Задача 3.Вывести на монитор произведение целых чисел в интервале [N1,N2] (N1*(N1+1)*…*N2), еслиN1<N2 и вывести числоN2, если N1≥N2. Ввод значений N1 и N2 должен осуществляться в диалоговом режиме. С этой целью можно использовать комбинацию предикатов:

write(“N1=”), /*предложение ввести N1*/

readint(N1)/*ввод набранного значения N1*/

Задача 4.Сгенерировать и вывести на монитор произвольную последовательность чисел и некоторого интервала [N1,N2] (N1≤N2) с заданным шагомp. Все числа в задаче имеют целочисленный формат. Их значения вводятся в диалоговом режиме.

Задача 5.Из произвольно заданного числа целых чисел выбрать и вывести на монитор все числа, больше некоторого заданного значения p (ввести с монитора). Результат представить в виде нового списка.