模式#1字段#2具有构成该模式的约束冲突

  • 本文关键字:模式 约束 冲突 字段 clips
  • 更新时间 :
  • 英文 :


我想让这个规则成为


(defrule practica-superada1
(or
(and
(oav ?alumno p1 apto)
(oav ?alumno p2 apto)
)
(and
(oav ?alumno p1|p2 apto)
(oav ?alumno trabajo ok)
)
)
=>
(assert (oav ?alumno practica superada))
)

这样:


(defrule practica-superada1
(or
(oav ?alumno p1&p2 apto)
(and
(oav ?alumno p1|p2 apto)
(oav ?alumno trabajo ok)
)
)
=>
(assert (oav ?alumno practica superada))
)

第一种方式是可以的,但第二种方式则不然。我收到错误:

Pattern #1 field #2 has constraint conflicts which make the pattern

有人能解释一下这个错误的原因吗?

字段约束p1&只有当该位置的值实际上是p1和p2时,p2才会匹配。这不可能发生。您不能用一个模式来替换两个模式,每个模式都需要匹配一个单独的事实。

考虑到它处理两种不同的情况,您可以用最简单的形式编写原始规则。您可以将事实条件元素减少为两个,但随后必须包含一个复杂的测试条件元素:

(defrule practica-superada1
(oav ?alumno ?v1 apto)
(oav ?alumno ?v2 ?v3)
(test (or (and (eq ?v1 p1)
(eq ?v2 p2)
(eq ?v3 apto))
(and (or (eq ?v1 p1) (eq ?v1 p2))
(eq ?v2 trabajo)
(eq ?v3 ok))))
=>
(assert (oav ?alumno practica superada))) 

最新更新