【发布时间】:2016-07-08 23:17:10
【问题描述】:
我是 JESS 的新手,对它的功能知之甚少。我有一个程序要求提供学生 ID 号,然后程序会运行并获取学生的科目。
问题是在程序结束时程序会询问用户他/她是否想获得另一个学生的科目。
如果用户想要输入另一个学生,它会返回到第一个触发的规则,但是当我尝试这样做时,规则只是激活并且没有触发。
可能是什么问题?我确保当然有(运行)。
这是我的代码。
(defrule check-subject
?a <- (phase check-back)
?stud <- (lookupID (id ?id))
(student-information (id-number ?id)
(course ?course)
(subjects-taken $?taken)
(year ?year)
(semester ?sem))
(prospectus-information (curriculum-name ?course)
(1st-year-1st-sem-subjects $?subjects1))
=>
(printout t "Student took: " (intersection$ $?taken $?subjects1) crlf)
(printout t "Student flunked: " (complement$ $?taken $?subjects1) crlf)
(assert (back-subject (complement$ $?taken $?subjects1)))
(retract ?a ?stud)
(ask))
我有询问功能
(deffunction ask ()
(printout t "Consult another? (y/n) ")
(if (eq (read) y)
then (assert (phase choose-student))))
当阶段选择学生被断言时我的defrule
(defrule student-select
(phase choose-student)
=>
(printout t "Input Student ID: ")
(assert (lookupID (id (read)))))
student-select 规则激活但从不触发。我的程序停在那里。
【问题讨论】:
-
问题是Jess代码有错误。这可以通过查看相关代码的人发现和修复。
-
我已经编辑了我的帖子。请帮帮我。谢谢。
-
如果有任何用处,请确保接受答案。不用写“谢谢”-cmets。
标签: shell expert-system jess