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,_,_,_,_)たとえば、すべての(日)ファクトには、各日とスロットの例に対して1つの部屋のみが必要であると 主張した後、特定のファクトを削除する方法day(sat,1,_,c6302,_,_,_,_)を見つけたいと思いますday(sat,1,_,c6301,_,_,_,_)

4

1 に答える 1

2

単純に a の冗長な解を削除したい場合(これはおそらく繰り返しを削除するという意味です) 、Goal単純に に置き換えます。これは、 と が普遍的に終了するためのグラウンド ソリューションしかない限り機能します。したがって、冗長なソリューションを削除するためにデータベースを操作する必要はありません。Goalsetof(t,Goal,_)GoalGoal

?- member(X, [a,b,a,c]) .
X = ;
X = b;
X = ; % 冗長です!
X = c.

?- setof(t,member(X, [a,b,a,c]),_) .
X = ;
X = b;
X = c.
于 2012-04-17T20:37:17.070 に答える