如何在CLIPS中定义规则中写入查找实例?



这个定义有什么问题,因为它总是给我这个错误

[PRNTUTIL2] Syntax Error:  Check appropriate syntax for defrule.
ERROR:
(defrule MAIN::print-university-info
?university <- (object (is-a University)
(universityName $?name)
(numFaculties $?num)
(faculties ?facultyy $?faculties))
?faculty <- (find-instance (
CLIPS> 

规则是

(defrule print-university-info
?university <- (object (is-a University) (universityName $?name) (numFaculties $?num) (faculties ?facultyy $?faculties))
?faculty <- (find-instance ((?facultyInstance Faculty)) (eq ?facultyy ?facultyInstance))
=> 
(printout t "University name: " ?name " Number of faculties: " ?num " Faculties: " ?faculty crlf)
)   

类是

(
defclass University
(is-a USER)
(slot universityName (type SYMBOL))
(slot numFaculties (type INTEGER))
(multislot faculties (type INSTANCE))
)
( 
defclass Faculty 
(is-a USER)
(slot facultyName (type STRING))
)

和实例

(make-instance Cairo of University (universityName "Cairo") (numFaculties 1) (faculties [FCAI]))
(make-instance FCAI of Faculty (facultyName "FCAI"))

我检查查找实例添加到剪辑(find-instance ((?教员教员))(eq ?教员教员[FCAI]))

返回这个

CLIPS> (find-instance ((?facultyInstance Faculty)) (eq ?facultyInstance [FCAI]))
([FCAI])

Find-instance是一个函数。要从规则的条件调用函数,需要使用test有条件的元素。您在规则中使用find-instance的方式是,CLIPS认为它是deftemplate的名称。通常,从规则的条件中调用查询函数几乎没有任何理由;对于大多数用例,您可以从规则的操作中调用它们。在规则的条件中,使用模式代替:

CLIPS (6.4 2/9/21)
CLIPS> 
(defclass University
(is-a USER)
(slot universityName (type SYMBOL))
(slot numFaculties (type INTEGER))
(multislot faculties (type INSTANCE)))
CLIPS> 
(defclass Faculty 
(is-a USER)
(slot facultyName (type STRING)))
CLIPS> 
(definstances initial
(Cairo of University 
(universityName "Cairo")
(numFaculties 1)
(faculties [FCAI]))
(FCAI of Faculty
(facultyName "FCAI")))
CLIPS> 
(defrule print-university-info
?university <- (object (is-a University) 
(universityName $?name)
(numFaculties $?num)
(faculties ?facultyy $?faculties))
?faculty <- (object (is-a Faculty)
(name ?facultyy))
=> 
(printout t "University name: " ?name " Number of faculties: " ?num " Faculties: " ?faculty crlf))   
CLIPS> (reset)
CLIPS> (run)
University name: Cairo Number of faculties: 1 Faculties: <Instance-FCAI>
CLIPS> 

最新更新