Jess-Rule:字段比较中的 Str-Cat 无法编译
Jess-Rule : Str-Cat in Field comparison doen't compile
我不想匹配 jess-object 的值(字符串),比较值是字符串和另一个字段的组合。
这是一个简单的 ("runnable") 示例:
(defclass Person (is-a :THING) (slot name (type string)) (slot email (type string)))
(mapclass Person)
(make-instance Andy of Person (name "Andy") (email "Andy@mail"))
(defrule search
(object (OBJECT ?tmpPerson)
(is-a Person)
(email (str-cat (slot-get ?tmpPerson name) "@mail"))
)
=>
(print t "found")
)
但代码无法在 JessTab 中编译。似乎在字段名称“name”之后不允许使用“(”。
错误:
Jess reported an error in routine Jesp.parsePattern.
Message: Bad slot value at token '('.
Program text: ( defrule search ( object ( OBJECT ?tmpPerson ) ( is-a Person ) ( name ( at line 5.
我该如何解决这个问题?
提前致谢
要将模式与函数返回的值相匹配,您必须在函数调用之前加上等号——即“(name =(str-cat ...”
我不想匹配 jess-object 的值(字符串),比较值是字符串和另一个字段的组合。
这是一个简单的 ("runnable") 示例:
(defclass Person (is-a :THING) (slot name (type string)) (slot email (type string)))
(mapclass Person)
(make-instance Andy of Person (name "Andy") (email "Andy@mail"))
(defrule search
(object (OBJECT ?tmpPerson)
(is-a Person)
(email (str-cat (slot-get ?tmpPerson name) "@mail"))
)
=>
(print t "found")
)
但代码无法在 JessTab 中编译。似乎在字段名称“name”之后不允许使用“(”。
错误:
Jess reported an error in routine Jesp.parsePattern.
Message: Bad slot value at token '('.
Program text: ( defrule search ( object ( OBJECT ?tmpPerson ) ( is-a Person ) ( name ( at line 5.
我该如何解决这个问题?
提前致谢
要将模式与函数返回的值相匹配,您必须在函数调用之前加上等号——即“(name =(str-cat ...”