Мне нужно построить список, основанный на фактах, которые у меня есть. Например, у меня есть список курсов, как это:Добавить факт в список, если он еще не находится в
attend(student1,c1).
attend(student1,c2).
attend(student2,c1).
attend(student2,c3).
Теперь я хочу, чтобы иметь предикат courselist/2, который возвращает список курсов для данного студента. Конечно, каждый курс должен быть в этом списке только один раз. Я не могу использовать встроенные предикаты, такие как findall, но я могу использовать member или append. До сих пор у меня есть что-то вроде этого:
courselist(S,R) :- attend(S,C), member(C,R), courselist(S,R).
courselist(S,R) :- attend(S,C), append([C],L,R), courselist(S,R).
, и я знаю, что это неправильно, но я не знаю, как найти все факты, не вдаваясь в бесконечный цикл.