2012-04-17 52 views
1
%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,_,_,_,_)如何在这种特殊情况下使用缩进去除重复?

回答

2

如果你只是想删除的Goal –这多余的解决方案是什么,你可能与删除重复–只需setof(t,Goal,_)更换Goal意思。只要Goal只有地面解决方案,并且只要Goal能够普遍终止,这种方法就行得通。因此,不需要任何数据库操作来移除冗余解决方案。

 
?- 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. 
+0

请试试看,谢谢! – 2012-04-17 21:53:43

相关问题