У меня есть следующий файл с присутствующим предикатом, который символизирует, что каждый студент посещает определенный курс (первый аргумент: Student_ID, второй аргумент: Course_ID).
attends(476, c216).
attends(478, c216).
attends(484, c216).
attends(487, c216).
attends(491, c216).
Я хочу создать предикат-функцию, которая будет выглядеть следующим образом:
function(W1,L,E):-
bagof(C,attends(Y,C), L1),intersect(L1,W1,L),length(L,E).
%W1 : Week-1 (List: contains courses that will be exams on).
%L : List of intersection between students courses and the ones that
% will be exams on that week(W1). (It is returned only for
% debugging, i don't actually need this
% E : INT : Number of courses the student will be examined on the 1st week
Где W1 (неделя 1) - это список из 3 курсов (например, W1 = [c216, c205, c902]), а E - количество курсов, на которых будет проходить экзамен для студента.
Проблема в том, что для каждого студента будет откат, поэтому я должен нажать «;». Так что для каждого студента есть разные E. Вместо этого я хочу, чтобы все эти значения E были в одном списке без нажатия «;» , а затем посмотрите, сколько значений E больше, чем 2 (> 2 ).