我需要根据我拥有的事实构建一个列表。例如,我有一个这样的课程列表:
attend(student1,c1).
attend(student1,c2).
attend(student2,c1).
attend(student2,c3).
现在我想要一个谓词 courselist/2 ,它返回给定学生的课程列表。当然,每门课程都应该只在这个列表中出现一次。我不能使用像 findall 这样的内置谓词,但我可以使用成员或附加。到目前为止,我有这样的事情:
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).
我知道那是错误的,但我不知道如何在不陷入无限循环的情况下找到所有事实。