%Examples:
%days([saturday,sunday,monday,tuesday,wednesday,thursday]).
%slots([1,2,3,4,5]).
%course_meetings(csen402,tutorial,t07,nehal,'tutorial for t07').
%course_meetings(comm401,lecture,all_group_4,dr_amr_talaat,'lecture 1')
%tutorialrooms([c6301,b4108,c2201,c2301,c2202,c2203]).
day_tut(Day,Slot,Place,Course,Group,Instructor,Descr):-
days(X),member(Day,X),
tutorialrooms(X1),member(Place,X1),
course_meetings(Course,tutorial,Group,Instructor,Descr),
slots(X2),member(Slot,X2),
assert(day(Day,Slot,tutorial,Place,Course,Group,Instructor,Descr)).
我想在断言之后找到一种方法来删除某些事实
每天(每天)事实必须每天只有一个房间和插槽
例如:我们可以拥有day(sat,1,_,c6301,_,_,_,_)
和
day(sat,1,_,c6302,_,_,_,_)
但我们不能拥有
另一次出现day(sat,1,_,c6301,_,_,_,_)
。
答案 0 :(得分:2)
如果您只想删除Goal
的冗余解决方案 - 这可能意味着删除重复内容 - 只需将Goal
替换为setof(t,Goal,_)
即可。只要Goal
只有Goal
的地面解决方案并且只要{{1}}普遍终止,这种方法就有效。因此,不需要任何数据库操作来删除冗余解决方案。
?- member(X, [a,b,a,c]). X = a ; X = b ; X = a ; % redundant! X = c. ?- setof(t,member(X, [a,b,a,c]),_). X = a ; X = b ; X = c.