【发布时间】:2017-04-12 04:21:14
【问题描述】:
我正在编写一个名为leagalCourse 的函数,它只需要一个参数,一个课程列表。例如,john+mary+94 之类的课程代表 John 和 Mary 完成的一个项目,分数为 94。
- 如果课程数据是“合法的”,则应该是
true,这意味着它不能有两次同名的项目,例如john+john+70。 - 列表中也不能有两个项目包含同一对学生。所以如果列表中有
harry+ron+82的项目,列表中同时包含harry+ron+90或ron+harry+63是非法的。
有一个示例输出:
?- legalCourse([one+two+3,four+five+6,one+six+7]).
true.
?- legalCourse([one+two+3,four+four+6,one+six+7]).
false.
?- legalCourse([one+two+3,four+five+6,one+two+7]).
false.
?- legalCourse([one+two+3,two+one+6,one+six+7]).
false.
这是我尝试过的:
legalCourse([]).
legalCourse(X) :-
diffName(X).
legalCourse([Project|M]):-
diffName(Project),
not(samePair([Project|M])),
legalCourse(M).
diffName(Name1+Name2+_) :-
Name1 \= Name2.
/*can not have duplicated group*/
samePair([Name1+Name2+_|More]) :-
append([[head],tail,More]),
member(Name1,[head]),
member(Name2,[head]).
在我添加 samePair 谓词之前,该函数部分工作。
【问题讨论】:
标签: prolog