这是我的代码:序言 - 添加从列表中的元素到另一个列表,不重复
students([], NameList).
students([Name1+Name2+_|MoreProjects], [Name1,Name2|NameList]) :-
not_member(Name1, NameList),
not_member(Name2, NameList),
students(MoreProjects, NameList).
students([Name1+Name2+_|MoreProjects], [Name1|NameList]) :-
not_member(Name1, NameList),
not(not_member(Name2, NameList)),
students(MoreProjects, NameList).
students([Name1+Name2+_|MoreProjects], [Name2|NameList]) :-
not(not_member(Name1, NameList)),
not_member(Name2, NameList),
students(MoreProjects, NameList).
students([Name1+Name2+_|MoreProjects], NameList) :-
not(not_member(Name1, NameList)),
not(not_member(Name2, NameList)),
students(MoreProjects, NameList).
not_member(_, []).
not_member(X, [Head|Tail]) :-
X \= Head,
not_member(X, Tail).
什么它应该做的是检查,如果名称1或名称2已经在绑定列表,并将其添加到结果。
运行这个合法查询
students([ Dickens+Joyce+1,
Chekhov+Tolstoy+2,
Austen+Shakespeare+3,
Shirley+Byron+4
],
StudentList).
只是给了我假的。我应该如何调整我的编码?