在Prolog中,我想以下列方式使用if-else语句:
lecture(spanish,monday,at8).
lecture(french,monday,at8).
lecture(english,monday,at10).
lecture(german,tuesday,at8).
generatePossibleSchedulesWithTwoLectures(LectureA,LectureB):-
lecture(LectureA,A,X),
lecture(LectureB,B,Y),
%If A of LectureA is equal to B of lectureB -> times must be un-equal
% How to do implement the requirement of the line above here?
因此,该函数应生成两个讲座的时间表,这两个讲座不在同一时段。
答案 0 :(得分:2)
您首先假设,我想以下列方式使用if-else语句,但您的问题逻辑并未描述if-then-else条件。 if-then-else
不是您希望实现目标的构造:
使用两个不在同一时段的讲座生成时间表
此外,Prolog if-then-else
构造A -> B ; C
删除了您所选择的选择点。有关详细信息,请参阅What's the meaning of Prolog operator '->'
你真正想要的是:
安排两个讲座A
& B
有效如果 Day1
且Time1
是A
,和 Day2
的时段Time2
是B
,和时段Day1-Time1
和Day2-Time2
不同的时段。
如果事实是,为避免重复并按时间顺序保持计划,我们可以强制执行“第一”时间段早于第二时间段。这转化为:
generate_possible_schedules_with_two_lectures(LectureA, LectureB):-
lecture(LectureA, Day1, Time1),
lecture(LectureB, Day2, Time2),
dif(LectureA, LectureB), % don't schedule the same class
Day1-Time1 @< Day2-Time2 % timeslots in order, and different
我们通过与日期和时间形成一个术语A-B
来简化时段比较。您可以进行较长时间的比较,单独比较日期和领带,将Day1-Time1 @< Day2-Time2
替换为(Day1 @< Day2 ; Day1 == Day2, Time1 @< Time2)
。在任何一种情况下,您都会得到以下数据结果:
?- generate_possible_schedules_with_two_lectures(A, B).
A = spanish,
B = german ;
A = french,
B = german ;
A = english,
B = spanish ;
A = english,
B = french ;
A = english,
B = german ;
false.