Advertisement
Guest User

Untitled

a guest
Apr 21st, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 8.44 KB | None | 0 0
  1. domains
  2. list_statement = statement* /*сводная ведомость*/
  3. list_group = student*   /*список группы*/
  4. name_faculty, name, familiya, otchestvo, predmet, voennaya_kafedra = symbol
  5. mark, speciality_code, group_number = real
  6. group = group(name_faculty, speciality_code, group_number, list_group)
  7. student = student(name, familiya, otchestvo, voennaya_kafedra, list_statement)
  8. statement = statement(predmet, mark)
  9.  
  10. facts
  11. average_score(real, real)
  12. min_students(group_number, real)
  13. dq3(group_number, predmet)
  14. dq4(group_number, speciality_code)
  15. dq5(name_faculty, group_number)
  16.  
  17. predicates
  18.    nondeterm fak(group)
  19.    q1s(group_number)
  20.    %q1(group_number)
  21.    q11(real, list_group, real, real, real)
  22.    q11k(list_group)
  23.    q12(real, list_statement, real, real, real)
  24.    q2
  25.    q21(list_group, real)
  26.    nondeterm q4s(group_number)
  27.    nondeterm q4(group_number)
  28.    nondeterm q5(name_faculty)
  29.    nondeterm q5s(name_faculty)
  30.    nondeterm q3(real)
  31.    nondeterm q3f(group_number)
  32.    nondeterm q31f(list_statement)
  33.    nondeterm q32f(list_group)
  34.    nondeterm q32(real,list_group)
  35.    nondeterm q33(real, list_statement)
  36.    
  37.  
  38. % 1)Подсчитать средний балл сессии по указанной группе;
  39. % 2)Найти группу, в которой минимальное число студентов;
  40. % 3)Найти все предметы в указанной группе, по которым сдавался экзамен;
  41. % 4)Найти код специальности указанной группы;
  42. % 5)Найти все группы студентов указанного факультета;
  43.  
  44.  
  45. clauses
  46. fak(group("Факультет №6", 903011, 6201,  [student("Иван", "Луника", "Дмитриевич", "нет", [statement("Физика", 3), statement("Мат. анализ", 4)]),
  47.                         student("Виталий", "Борисов", "Валериевич", "нет", [statement("Физика", 3), statement("Мат.анализ", 3)]),
  48.                         student("Виктория", "Геккель", "Владимировна", "нет",[statement("Теория графов", 1), statement("Мат.анализ", 5)]),
  49.                         student("Богдан", "Чертков", "Игоревич", "да",[statement("Электротехника", 4), statement("Мат. анализ", 5)]),
  50.                         student("Александр", "Божимов", "Дмитриевич", "да",[statement("Программирование", 4), statement("Теория графов", 1)]),
  51.                         student("Константин", "Лавров", "Константинович", "да", [statement("Программирование", 3), statement("Мат. логика", 3)])])).
  52.  
  53. fak(group("Факультет №6", 903050, 6204,  [student("Иван", "Иванов", "Иванович", "нет", [statement("История", 1), statement("Мат. анализ", 5)]),
  54.                         student("Виталий", "Муратов", "Витальевич", "нет", [statement("Физика", 1), statement("Мат.анализ", 3)]),
  55.                         student("Юрий", "Петров", "Петрович", "нет",[statement("Физика", 1), statement("Мат.логика", 2)]),
  56.                         student("Николай", "Трегубов", "Игоревич", "да",[statement("Электротехника", 4), statement("Мат. анализ", 4)]),
  57.                         student("Александр", "Стасенко", "Дмитриевич", "да",[statement("Программирование", 3), statement("Мат. анализ", 4)])])).
  58.                        
  59. fak(group("Факультет №6", 903011, 6203,  [student("Иван", "Нефёдов", "Дмитриевич", "нет", [statement("Физика", 4), statement("Мат. анализ", 4)]),
  60.                         student("Виталий", "Анкерман", "Валериевич", "нет", [statement("Физика", 5), statement("Мат.анализ", 2)]),
  61.                         student("Виктория", "Геккель", "Владимировна", "нет",[statement("Теория графов", 1), statement("Мат.анализ", 5)]),
  62.                         student("Богдан", "Чертков", "Игоревич", "да",[statement("Электротехника", 3), statement("Мат. анализ", 4)]),
  63.                         student("Александр", "Божимов", "Дмитриевич", "да",[statement("Программирование", 4), statement("Теория графов", 1)]),
  64.                         student("Константин", "Лавров", "Константинович", "да", [statement("Программирование", 3), statement("Мат. логика", 3)]),
  65.                         student("Константин", "Лавров", "Константинович", "да", [statement("Программирование", 3), statement("Мат. логика", 3)])])).
  66.  
  67. fak(group("Факультет №6", 903011, 6205,  [student("Иван", "Нефёдов", "Дмитриевич", "нет", [statement("Физика", 4), statement("Мат. анализ", 4)]),
  68.                         student("Виталий", "Анкерман", "Валериевич", "нет", [statement("Физика", 5), statement("Мат.анализ", 2)]),
  69.                         student("Александр", "Божимов", "Дмитриевич", "да",[statement("Программирование", 4), statement("Теория графов", 1)]),
  70.                         student("Константин", "Лавров", "Константинович", "да", [statement("Программирование", 3), statement("Мат. логика", 3)]),
  71.                         student("Константин", "Лавров", "Константинович", "да", [statement("Программирование", 3), statement("Мат. логика", 3)])])).
  72.                        
  73. fak(group("Факультет №6", 903011, 6202,[student("Иван", "Нефёдов", "Дмитриевич", "нет", [statement("Физика", 4), statement("Мат. анализ", 4)]),
  74.                            student("Константин", "Лавров", "Константинович", "да", [statement("Программирование", 3), statement("Мат. логика", 3)])])).
  75.  
  76.  
  77.  
  78.  
  79. /*запрос 1*/
  80. average_score(0,0).
  81. q1s(N):- fak(group(_,_,N,L)), q11(N,L,0,C,0), average_score(E,R), C > R,
  82. retract(average_score(E,R)), assert(average_score(N,C)), fail.
  83. q11(_,[],M1,M,G):-M=M1/G.
  84. 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).
  85. q12(_,[],D1,D,P):-D=D1/P.
  86. q12(F,[H1|T1],D1,D2,P1):-H1=statement(_,M), D3=D1+M, P3=P1+1,
  87. q12(F,T1,D3,D2,P3).
  88.  
  89. /*запрос 1 динамический*/
  90. %average_score(0,0).
  91. %q1(G):- fak(group(_,_,G,L)), q11(G,L,0,C,0), average_score(E,R), C > R,
  92. %retract(average_score(E,R)), assert(average_score(G,C)), fail.
  93. %q11k([H|T]):-H = student
  94.  
  95.  
  96.  
  97. /*запрос 2*/
  98. min_students(6202, 23321456).
  99. q2:- fak(group(_,_,G,L)), min_students(Q,M), q21(L,N), N < M,
  100. retract(min_students(Q,M)), assert(min_students(G,N)), fail.
  101. q21([_|T],N):-q21(T,N1),N=N1+1.
  102. q21([],0).
  103.  
  104. /*статический запрос 3*/
  105. q3f(G):-fak(group(_,_,G,K)),q32f(K).
  106. q32f([]).
  107. q32f([K|T]):- K = student(_,_,_,_,L), q31f(L), q32f(T).
  108. q31f([L|T]):- L = statement(P,M), M > 1.0, write(P) ,nl, q31f(T).
  109. q31f([L|T]):- L = statement(_,M), M <= 1.0, nl, q31f(T).
  110. q31f([]).
  111.  
  112. /*динамический запрос 3*/
  113. q3(G):- dq3(G,P), write('#', P), nl, fail.
  114. q3(G):- not(dq3(G,_)), fak(group(_,_,G,L)), q32(G,L), fail.
  115. q32(G,[H|T]):- H = student(_,_,_,_,L1), q33(G, L1), q32(G,T).
  116. q32(_,[]).
  117. q33(G, [H1|T1]):- H1 = statement(P,_), assert(dq3(G,P)), write(P), nl, q33(G,T1).
  118. q33(_,[]).
  119.  
  120. /*статический запрос 4*/
  121. q4s(F):- fak(group(_,S,F,_)), write(S), nl, fail.
  122.  
  123. /*динамический запрос 4*/
  124. q4(F):- dq4(F,S), write(F, " ", S), nl, fail.
  125. q4(F):- not(dq4(F,_)), fak(group(_,C,F,_)), write(C), nl, assert(dq4(F,C)), fail.
  126.  
  127. /*статический запрос 5*/
  128. q5s(F):- fak(group(F,_,G,_)), write(G), nl, fail.
  129.  
  130. /*динамический запрос 5*/
  131. q5(F):- dq5(F,G), write(F," ", G), nl, fail.
  132. q5(F):- not(dq5(F,_)), fak(group(F,_,G,_)), write(G), nl, assert(dq5(F,G)), fail.
  133.  
  134.  
  135. goal
  136. q1s(6202); average_score(N,C).
  137. %q2; min_students(A,B).
  138. %q3s(6202).
  139. %q3f(6204).
  140. %q3(6204); q3(6204).
  141. %q4s(6204).
  142. %q4(6204); q4(6204).
  143. %q5s("Факультет №6").
  144. %q5("Факультет №6"); q5("Факультет №6").
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement