Как я могу получить список фактов с идентификатором, соответствующим каждому элементу списка фактов с одинаковым идентификатором, используя Prolog?

#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:

Я предлагаю несколько советов, которые помогут вам начать.

  1. Вы должны перебирать каждое предложение student, чтобы получить каждый курс, который он выполняет, и сохранять данные обратным образом: курс -> список студентов. Простейшие способы выполнения 1. вы можете сохранить данные во внутренней базе данных, т. Е. для каждого студента указать курс фактов (CourseID, StudentID). Есть другие способы.

  2. Восстановите курс данных -> список студентов в список. Для каждого курса найдите список студентов, используя findall. Результат утверждается в базе данных list_(CourseID, listOfStudents).

Попробуйте это и сообщите здесь!