所以我想在伪代码
中创建一个这样的规则IF ?subject in ?course with ?schedule is still available
OR
IF ?subject in ?course2 with ?schedule2 is still available
THEN assert ?subject
我以为我可以使用像
这样的连接约束(or (and (course ?course) (sched ?sched))
(and (course ?course1) (sched ?sched1)))
我有以下Deftemplate和Deffacts。
(deftemplate subject-information
(slot name)
(slot course)
(slot prerequisite)
(multislot sem-offered)
(slot priority-lvl)
(slot units)
(slot section)
(slot schedule)
(slot day))
(deffacts subject-info
(subject-information
(name CS222)
(course BSIT)
(prerequisite Math101)
(prerequisite2 CS111)
(sem-offered 2)
(priority-lvl 3)
(units 4)
(section C)
(schedule 1330-1455)
(day MW)
(add-day TTH))
(subject-information
(name CS222)
(pre-requisites CS111)
(pre-requisites2 Math101)
(course BSCS)
(sem-offered 2 3)
(priority-lvl 3)
(units 4)
(section A)
(schedule 1200-1325)
(day MW)))
我有两个SAME主题的deffacts与不同的课程不同的部分。我有一个学生课程BSCS,我想要的是程序找到适合他的日程安排的BSCS课程,但如果没有找到。它去检查另一个班级'时间表。
答案 0 :(得分:0)
我看不到你需要那个“或”。您可以使用一种模式找到BSCS课程事件,绑定计划并使用学生模式来测试可用性。
(subject-information {course == "BSCS"}
(schedule ?sched))
(student-information (free-schedule $? ?sched $?))
所以我只是假设学生信息提供免费时间表列表。 - 计划存储在数据中的方式可能适合人类读者,但不适合计算匹配。也许每天都有一组固定的课堂时间,但即使如此,一个插槽中的匹配天数和另一个插槽中的时间也是不方便的。如果开始和结束时间可以是任何东西,根据模式hhmm-hhmm检查字符串(!)一个匹配或包含(!)另一个将需要一个函数。