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,_,_,_,_).

4

1 回答 1

2

如果您只是想删除 a 的冗余解决方案Goal- 这可能是您删除重复项的意思 - 只需替换Goalsetof(t,Goal,_). 只要只有地面解决方案Goal并且只要Goal普遍终止,这就会起作用。因此,不需要任何数据库操作来删除冗余解决方案。

?-成员(X,[a,b,a,c])。
X = 一个;
X = 乙;
X = 一个;% 多余的!
X = c。

?- setof(t,member(X, [a,b,a,c]),_)。
X = 一个;
X = 乙;
X = c。
于 2012-04-17T20:37:17.070 回答