Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- domains
- list_statement = statement* /*сводная ведомость*/
- list_group = student* /*список группы*/
- name_faculty, name, familiya, otchestvo, predmet, voennaya_kafedra = symbol
- mark, speciality_code, group_number = real
- group = group(name_faculty, speciality_code, group_number, list_group)
- student = student(name, familiya, otchestvo, voennaya_kafedra, list_statement)
- statement = statement(predmet, mark)
- facts
- average_score(real, real)
- min_students(group_number, real)
- dq3(group_number, predmet)
- dq4(group_number, speciality_code)
- dq5(name_faculty, group_number)
- predicates
- nondeterm fak(group)
- q1s(group_number)
- %q1(group_number)
- q11(real, list_group, real, real, real)
- q11k(list_group)
- q12(real, list_statement, real, real, real)
- q2
- q21(list_group, real)
- nondeterm q4s(group_number)
- nondeterm q4(group_number)
- nondeterm q5(name_faculty)
- nondeterm q5s(name_faculty)
- nondeterm q3(real)
- nondeterm q3f(group_number)
- nondeterm q31f(list_statement)
- nondeterm q32f(list_group)
- nondeterm q32(real,list_group)
- nondeterm q33(real, list_statement)
- % 1)Подсчитать средний балл сессии по указанной группе;
- % 2)Найти группу, в которой минимальное число студентов;
- % 3)Найти все предметы в указанной группе, по которым сдавался экзамен;
- % 4)Найти код специальности указанной группы;
- % 5)Найти все группы студентов указанного факультета;
- clauses
- fak(group("Факультет №6", 903011, 6201, [student("Иван", "Луника", "Дмитриевич", "нет", [statement("Физика", 3), statement("Мат. анализ", 4)]),
- student("Виталий", "Борисов", "Валериевич", "нет", [statement("Физика", 3), statement("Мат.анализ", 3)]),
- student("Виктория", "Геккель", "Владимировна", "нет",[statement("Теория графов", 1), statement("Мат.анализ", 5)]),
- student("Богдан", "Чертков", "Игоревич", "да",[statement("Электротехника", 4), statement("Мат. анализ", 5)]),
- student("Александр", "Божимов", "Дмитриевич", "да",[statement("Программирование", 4), statement("Теория графов", 1)]),
- student("Константин", "Лавров", "Константинович", "да", [statement("Программирование", 3), statement("Мат. логика", 3)])])).
- fak(group("Факультет №6", 903050, 6204, [student("Иван", "Иванов", "Иванович", "нет", [statement("История", 1), statement("Мат. анализ", 5)]),
- student("Виталий", "Муратов", "Витальевич", "нет", [statement("Физика", 1), statement("Мат.анализ", 3)]),
- student("Юрий", "Петров", "Петрович", "нет",[statement("Физика", 1), statement("Мат.логика", 2)]),
- student("Николай", "Трегубов", "Игоревич", "да",[statement("Электротехника", 4), statement("Мат. анализ", 4)]),
- student("Александр", "Стасенко", "Дмитриевич", "да",[statement("Программирование", 3), statement("Мат. анализ", 4)])])).
- fak(group("Факультет №6", 903011, 6203, [student("Иван", "Нефёдов", "Дмитриевич", "нет", [statement("Физика", 4), statement("Мат. анализ", 4)]),
- student("Виталий", "Анкерман", "Валериевич", "нет", [statement("Физика", 5), statement("Мат.анализ", 2)]),
- student("Виктория", "Геккель", "Владимировна", "нет",[statement("Теория графов", 1), statement("Мат.анализ", 5)]),
- student("Богдан", "Чертков", "Игоревич", "да",[statement("Электротехника", 3), statement("Мат. анализ", 4)]),
- student("Александр", "Божимов", "Дмитриевич", "да",[statement("Программирование", 4), statement("Теория графов", 1)]),
- student("Константин", "Лавров", "Константинович", "да", [statement("Программирование", 3), statement("Мат. логика", 3)]),
- student("Константин", "Лавров", "Константинович", "да", [statement("Программирование", 3), statement("Мат. логика", 3)])])).
- fak(group("Факультет №6", 903011, 6205, [student("Иван", "Нефёдов", "Дмитриевич", "нет", [statement("Физика", 4), statement("Мат. анализ", 4)]),
- student("Виталий", "Анкерман", "Валериевич", "нет", [statement("Физика", 5), statement("Мат.анализ", 2)]),
- student("Александр", "Божимов", "Дмитриевич", "да",[statement("Программирование", 4), statement("Теория графов", 1)]),
- student("Константин", "Лавров", "Константинович", "да", [statement("Программирование", 3), statement("Мат. логика", 3)]),
- student("Константин", "Лавров", "Константинович", "да", [statement("Программирование", 3), statement("Мат. логика", 3)])])).
- fak(group("Факультет №6", 903011, 6202,[student("Иван", "Нефёдов", "Дмитриевич", "нет", [statement("Физика", 4), statement("Мат. анализ", 4)]),
- student("Константин", "Лавров", "Константинович", "да", [statement("Программирование", 3), statement("Мат. логика", 3)])])).
- /*запрос 1*/
- average_score(0,0).
- q1s(N):- fak(group(_,_,N,L)), q11(N,L,0,C,0), average_score(E,R), C > R,
- retract(average_score(E,R)), assert(average_score(N,C)), fail.
- q11(_,[],M1,M,G):-M=M1/G.
- q11(A1,[H|T], Y,W,Q):-H=student(_,_,_,_,U), q12(A1,U,0,V,0),Y1=Y+V, Q1=Q+1,q11(A1,T,Y1,W,Q1).
- q12(_,[],D1,D,P):-D=D1/P.
- q12(F,[H1|T1],D1,D2,P1):-H1=statement(_,M), D3=D1+M, P3=P1+1,
- q12(F,T1,D3,D2,P3).
- /*запрос 1 динамический*/
- %average_score(0,0).
- %q1(G):- fak(group(_,_,G,L)), q11(G,L,0,C,0), average_score(E,R), C > R,
- %retract(average_score(E,R)), assert(average_score(G,C)), fail.
- %q11k([H|T]):-H = student
- /*запрос 2*/
- min_students(6202, 23321456).
- q2:- fak(group(_,_,G,L)), min_students(Q,M), q21(L,N), N < M,
- retract(min_students(Q,M)), assert(min_students(G,N)), fail.
- q21([_|T],N):-q21(T,N1),N=N1+1.
- q21([],0).
- /*статический запрос 3*/
- q3f(G):-fak(group(_,_,G,K)),q32f(K).
- q32f([]).
- q32f([K|T]):- K = student(_,_,_,_,L), q31f(L), q32f(T).
- q31f([L|T]):- L = statement(P,M), M > 1.0, write(P) ,nl, q31f(T).
- q31f([L|T]):- L = statement(_,M), M <= 1.0, nl, q31f(T).
- q31f([]).
- /*динамический запрос 3*/
- q3(G):- dq3(G,P), write('#', P), nl, fail.
- q3(G):- not(dq3(G,_)), fak(group(_,_,G,L)), q32(G,L), fail.
- q32(G,[H|T]):- H = student(_,_,_,_,L1), q33(G, L1), q32(G,T).
- q32(_,[]).
- q33(G, [H1|T1]):- H1 = statement(P,_), assert(dq3(G,P)), write(P), nl, q33(G,T1).
- q33(_,[]).
- /*статический запрос 4*/
- q4s(F):- fak(group(_,S,F,_)), write(S), nl, fail.
- /*динамический запрос 4*/
- q4(F):- dq4(F,S), write(F, " ", S), nl, fail.
- q4(F):- not(dq4(F,_)), fak(group(_,C,F,_)), write(C), nl, assert(dq4(F,C)), fail.
- /*статический запрос 5*/
- q5s(F):- fak(group(F,_,G,_)), write(G), nl, fail.
- /*динамический запрос 5*/
- q5(F):- dq5(F,G), write(F," ", G), nl, fail.
- q5(F):- not(dq5(F,_)), fak(group(F,_,G,_)), write(G), nl, assert(dq5(F,G)), fail.
- goal
- q1s(6202); average_score(N,C).
- %q2; min_students(A,B).
- %q3s(6202).
- %q3f(6204).
- %q3(6204); q3(6204).
- %q4s(6204).
- %q4(6204); q4(6204).
- %q5s("Факультет №6").
- %q5("Факультет №6"); q5("Факультет №6").
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement