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

あなたは、単にこれはおそらく、単にsetof(t,Goal,_)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

ありがとう! –

関連する問題