2012-04-17 57 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

相關問題