检查 if() CLIPS 中的多个字段

check multiple fields in if() CLIPS

我正在尝试在 CLIPS 上的规则中进行比较,检查三个条件之一是否可以断言一个新事实。代码是:

(defrule empresa_cae_mucho
(Empresa (nombre ?n)(var_anio ?anio)(var_sem ?sem)(var_tri ?tri))
=>
(or (or (test(> ?anio 30))(test (> ?sem 30))(test (> ?tri 30))))
    (assert valor_infravalorado
            (nombre ?n))
    (assert (Explicacion
            (nombre ?n)
            (motivo "la empresa ha caido bastante aunque no en el ultimo mes
                pero su PER es bajo")))

)

但它不起作用,我在互联网上找不到正确的方法。有帮助吗?

CLIPS> (clear)
CLIPS> 
(deftemplate Empresa
  (slot nombre)
  (slot var_anio)
  (slot var_sem)
  (slot var_tri))
CLIPS>   
(deftemplate valor_infravalorado
  (slot nombre))
CLIPS>    
(deftemplate Explicacion
  (slot nombre)
  (slot motivo))
CLIPS>   
(deffacts start
  (Empresa (nombre 1) (var_anio 40) (var_sem 10) (var_tri 25))
  (Empresa (nombre 2) (var_anio 0) (var_sem 35) (var_tri 10))
  (Empresa (nombre 3) (var_anio 30) (var_sem 20) (var_tri 55))
  (Empresa (nombre 4) (var_anio 30) (var_sem 30) (var_tri 30)))
CLIPS> 
(defrule empresa_cae_mucho
  (Empresa (nombre ?n)
           (var_anio ?anio)
           (var_sem ?sem)
           (var_tri ?tri))
  (test (or (> ?anio 30)
            (> ?sem 30)
            (> ?tri 30)))
  =>
  (assert (valor_infravalorado (nombre ?n)))
  (assert (Explicacion
             (nombre ?n)
             (motivo "la empresa ..."))))
CLIPS> (reset)
CLIPS> (watch rules)
CLIPS> (watch facts)
CLIPS> (run)
FIRE    1 empresa_cae_mucho: f-3
==> f-5     (valor_infravalorado (nombre 3))
==> f-6     (Explicacion (nombre 3) (motivo "la empresa ..."))
FIRE    2 empresa_cae_mucho: f-2
==> f-7     (valor_infravalorado (nombre 2))
==> f-8     (Explicacion (nombre 2) (motivo "la empresa ..."))
FIRE    3 empresa_cae_mucho: f-1
==> f-9     (valor_infravalorado (nombre 1))
==> f-10    (Explicacion (nombre 1) (motivo "la empresa ..."))
CLIPS> (facts)
f-0     (initial-fact)
f-1     (Empresa (nombre 1) (var_anio 40) (var_sem 10) (var_tri 25))
f-2     (Empresa (nombre 2) (var_anio 0) (var_sem 35) (var_tri 10))
f-3     (Empresa (nombre 3) (var_anio 30) (var_sem 20) (var_tri 55))
f-4     (Empresa (nombre 4) (var_anio 30) (var_sem 30) (var_tri 30))
f-5     (valor_infravalorado (nombre 3))
f-6     (Explicacion (nombre 3) (motivo "la empresa ..."))
f-7     (valor_infravalorado (nombre 2))
f-8     (Explicacion (nombre 2) (motivo "la empresa ..."))
f-9     (valor_infravalorado (nombre 1))
f-10    (Explicacion (nombre 1) (motivo "la empresa ..."))
For a total of 11 facts.
CLIPS>