#list #prolog
#Список #пролог
Вопрос:
student(2000100001,1,[math101, phys201, ec201]).
student(2000100002,1,[math101, phys201, hist301]).
student(2000100003,1,[physics201, ec201, hist301])
Мне нужен предикат list_student(course_id,list_e). получает course_id и добавляет в list_e всех студентов, у которых есть этот курс.
Результат должен быть:
list_students(math101, L).
L = [2000100001, 2000100002]
Ответ №1:
Я предлагаю несколько советов, которые помогут вам начать.
-
Вы должны перебирать каждое предложение student, чтобы получить каждый курс, который он выполняет, и сохранять данные обратным образом: курс -> список студентов. Простейшие способы выполнения 1. вы можете сохранить данные во внутренней базе данных, т. Е. для каждого студента указать курс фактов (CourseID, StudentID). Есть другие способы.
-
Восстановите курс данных -> список студентов в список. Для каждого курса найдите список студентов, используя findall. Результат утверждается в базе данных list_(CourseID, listOfStudents).
Попробуйте это и сообщите здесь!