If statement Prolog如何以这种方式使用if/else?

If statement Prolog如何以这种方式使用if/else?,if-statement,prolog,If Statement,Prolog,在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(

在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?
因此,函数应该生成两个不在同一时间段的讲座的日程安排。

您首先假设,我想以以下方式使用if-else语句,但问题的逻辑没有描述if-then-else条件。
if-then-else
不是您想要实现以下目标的结构:

生成不在同一时间段的两个讲座的时间表

另外,Prolog
if-then-else
construct
A->B;C
删除您要查找的选择点。有关这方面的详细信息,请参见的答案

你真正想说的是:

如果
Day1
Time1
A
的时隙,
Day2
Time2
B
的时隙,则附表两节课
A
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

在Prolog中,
If-Then-Else
(A->B;C)
表示。我不明白你的其他要求,但这应该是你自己工作所需要的一切。是的,我读过。但是,这将输出以下内容:讲师A=西班牙语,讲师B=英语;讲师A=法语,讲师B=英语;讲师A=英语,讲师B=西班牙语;讲师A=英语,讲师B=法语;错。它遗漏了许多可能的解决方案。例如,第二个解决方案应该是西班牙语+德语。你说的“that”是什么意思。编辑您的问题以显示您的方法/代码。哇,非常感谢。但是,您的解决方案不允许检查给定的讲座是否适合一起进行,例如,通过调用generate_mablue_schedules_和两次讲座(德语、西班牙语)。我认为它不起作用,因为你排除了dublicates,对吗?@user2945914是的,很好。也许你可以试着修改我所做的来处理这个问题。我现在不在家,所以无法轻松访问。@user2945914简单的方法是在日期时间使用
dif/2
,而不是
。好的,谢谢。如果要完成这项任务,有很多更明确的讲座,并且每个结果有5次而不是2次讲座,这会很复杂吗?我是否需要手动检查讲座的每一次/每一天与所有其他时间/每一天,或者是否有一个很酷的序言魔法?@user2945914只要你对所有数据使用相同的日期/时间格式,并且你想要相同的规则,那么无论你有多少数据,它都应该有效。
?- 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.