2016-12-03 2 views
0

Я пытаюсь проверить, существует ли уже такой же экземпляр или нет.Соответствие jess multislot, игнорируя порядок

(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)) 

В моем случае, я утверждать justificand с (анте П Р), но порядка р, д и г не важно. Таким образом, тестовое правило должно быть успешным, даже если оно проверяется с помощью (antes q p r).

Но, похоже, jess рассматривает порядок значений мультислотов для соответствия.

Любой метод игнорирования порядка значений мультислотов для сопоставления?

Благодаря

ответ

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 
+0

Большое спасибо! Я ценю вашу помощь !!! – youngtackpark

 Смежные вопросы

  • Нет связанных вопросов^_^