【发布时间】:2016-03-20 22:13:17
【问题描述】:
我有以下缺陷。
(deffacts students
(student-information
(id-number 2014567)
(course BSCS)
(year 2)
(semester 2)
(subjects-taken CS111 Math103 Math101 Engl111n PE101)))
(deffacts curriculum
(prospectus-information
(curriculum-name BSCS)
(1st-year-1st-sem-subjects CS111 Bio101 Math103 Math101 Engl111n PE101))
在这个应用程序中,我向用户询问学生 ID,如果它确实存在于我的工作内存中,它会获取学生 ID 并将其信息绑定到全局变量中,例如 ?*id*、?*course*、@ 987654324@。我有这条规则来检查学生不能选修哪些科目。
(defrule check-back-subject
(phase check-back)
(prospectus-information (curriculum-name ?*course*)
(1st-year-1st-sem-subjects $?subjec))
?x <- (student-information (id-number ?*id*))
=>
(bind ?subject ?subjec)
(foreach ?subj ?subject
(if
(member$ ?subj ?x.subjects-taken)
then
(printout t "Student took: " ?subj crlf)
else
(assert (back-subject ?subj))
(printout t "Student did not take: " ?subj crlf))))
但是,由于全局变量,此规则无法发挥作用。当我用这样的 BSCS 替换 ?*course* 时:
(prospectus-information (curriculum-name BSCS)
并像这样用 2014567 替换 ?*id*
?x <- (student-information (id-number 2014567))
该规则完成了它的工作,它完美地输出了 student-2014567 无法学习的科目。但是这种规则效率不高,如果我有 10 个学生,那意味着我每个学生都有 10 条规则。为什么代码不适用于我的 defglobal 变量?我还确保 defglobal-reset 为假。
最后,纯粹用 JESS 编写的程序可以有可执行文件吗?谢谢你。
【问题讨论】:
标签: jess