我正在尝试检查是否已存在相同的实例。
(defemplate justificand (slot consq) (multislot antes))
(assert (justificand (consq s) (antes p q r))) ;;; order p q r
(defrule test
(exists (justificand (consq s) (antes q p r))) ;;; order q p r
=>
(printout t "matching success " crlf))
在我的情况下,我用(antes p q r)断言一个对齐,但p,q和r的顺序 并不重要。因此,即使用(antes q p r)进行测试,测试规则也需要成功。
但是,jess似乎考虑了用于匹配的多时隙值的顺序。
任何忽略多时隙值匹配顺序的方法?
由于
答案 0 :(得分:0)
使用你的deftemplate和这个功能
(deffunction unleq (?l1 $?l2)
(and (eq (length$ ?l1)(length$ $?l2))
(eq (length$ ?l1)(length$ (intersection$ ?l1 $?l2)))))
并插入事实:
(deffacts f1
(justificand (consq s1) (antes p q r))
(justificand (consq s2) (antes r p q))
(justificand (consq s3) (antes p q x))
(justificand (consq s4) (antes p q))
(justificand (consq s4) (antes r q q p p)))
此规则触发:
(defrule match
(justificand (consq ?s) (antes $?pqr&:(unleq $?pqr p q r)))
=>
(printout t "match for " ?s crlf))
给
match for s2
match for s1