- •Методическое пособие
- •1. Структура программы и синтаксис языка пролог
- •Структура программы на языке Пролог
- •2. Лабораторная работа №1. «вычисление целей. Откат»
- •Задания на лабораторную работу №1
- •3. Лабораторная работа №2. «рекурсия. Работа со списками».
- •3.1 Использование рекурсии
- •3.2 Списки
- •3.3. Использование структур в Прологе
- •3.4 Задания на лабораторную работу №2
- •4. Лабораторная работа № 3. «применение пролога для решения интеллектуальных задач»
- •4.1 Организация поиска в глубину
- •4.2 Организация повторения с использованием предиката fail
- •4.3 Задания на лабораторную работу №3
- •5. Лабораторная работа №4. «проектирование простейшей экономической советующей системы».
- •Список рекомендованной литературы
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 (ввести с монитора). Результат представить в виде нового списка.