If statement Prolog如何以这种方式使用if/else?
在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(
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
不是您想要实现以下目标的结构:
生成不在同一时间段的两个讲座的时间表
另外,Prologif-then-else
constructA->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.