Лифп / Лабораторная работа №2
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ КЫРГЫЗСКОЙ РЕСПУБЛИКИ
КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ ИМ. И. РАЗЗАКОВА
Лабораторная работа
Бишкек 2023
Лабораторная работа №2
Дана БД о сотрудниках в виде: ФИО, стаж, зарплата. Найти сотрудников стаж которых выше средней.
Листинг кода:
domains
S=integer*.
FIO=string.
St,Zp,Sum,Kol=integer.
predicates
nondeterm sotr(FIO,St,Zp).
nondeterm pr(FIO).
nondeterm sumkol(S,Sum,Kol).
clauses
sotr("Asan",3,15000).
sotr("Usem",3,11000).
sotr("Aman",5,13000).
sotr("Bektur",1,17000).
sotr("Manas",4,12000).
sumkol([],0,0).
sumkol([H|T],Sum, Kol):-sumkol(T,Sum1,Kol1),Sum=Sum1+H,Kol=Kol1+1
pr(Fio):- findall(St,sotr(_,St,_), LS), sumkol(LS,S,K), Sr=S/K,sotr(FIO,StS,_),StS>Sr.
goal
pr(Fio).
Фото результат:
Объяснение кода:
Этот код определяет три домена:
(S=integer*.) S целочисленного типа*,
(FIO=string.) FIO строкового типа,
(St,Zp,Sum,Kol=integer.) St, Zp, Sum и Kol целочисленного типа.
И определяет три предикатов:
1. nondeterm sotr(FIO,St,Zp).
2. nondeterm pr(FIO).
3. nondeterm sumkol(S,Sum,Kol).
У предикатов sotr(FIO,St,Zp) и sumkol(S,Sum,Kol) определены предложения. Предикат sotr(FIO,St,Zp) определяет пять примеров данных имени сотрудника, его трудового стажа и зарплаты.
sotr("Asan",3,15000).
sotr("Usem",3,11000).
sotr("Aman",5,13000).
sotr("Bektur",1,17000).
sotr("Manas",4,12000).
Предикат sumkol([],0,0) определяет, как вычислить сумму и количество элементов в списке.
Предикат pr(Fio) определяет, как найти сотрудников, чей трудовой стаж выше среднего.
Для этого он сначала находит старшинство всех сотрудников, используя предикат findall(St,sotr(_,St,_),LS) и сохраняет его в списке LS.
Затем сумма и количество элементов в LS вычисляются с использованием предиката sumkol(LS, S, K) и сохраняются в S и K соответственно.
Средний трудовой стаж рассчитывается путем деления S на K (Sr=S/K). Наконец, предикат sotr(FIO,StS,_) используется для поиска сотрудников, чей трудовой стаж выше среднего Sts>Sr.
Цель pr(Fio) состоит в том, чтобы найти сотрудников, чей трудовой стаж выше среднего.