java - 如何在jess中定义另一种模板类型的槽

标签 java jess

我有一个名为“人”的模板,该模板有眼睛、手、 body 和很多其他插槽。但这些插槽中的每一个都是其他模板。
那么如何为其他模板类型的模板定义插槽?
以及如何定义事实?

这是我主要内容的一个示例:

(deftemplate Eyes
(slot colorOfEye (type STRING))
(slot ShapeOfEye (type STRING)))
(deftemplate Person 
(slot eye (type Eyes))
)
(deffacts People
(Person (eye ....))
)
(reset)

定义 Person 模板不是这样工作的,我不知道如何定义事实

谢谢

最佳答案

您必须将它们定义为单独的模板。然后,您可以在主要事实中存储“事实ID”或“子事实”的其他标识符,然后使用该值将主要事实模式与“子事实”模式连接起来:

(defrule blue-eyed-person
    (person (name ?name) (eyes ?eyes))
    ?eyes <- (eyes (color blue))
    =>
    (printout t ?name " has blue eyes." crlf))

或者另一种选择

(defrule blue-eyed-person
    (person (name ?name) (eyes ?eyes))
    (eyes (id ?eyes) (color blue))
    =>
    (printout t ?name " has blue eyes." crlf))

你可能会说,首先要创造事实

(bind ?eyes (assert (eyes (color blue))))
(assert (person (name Fred) (eyes ?eyes)))

关于java - 如何在jess中定义另一种模板类型的槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10323024/

相关文章:

java - 正则表达式 - 仅提取日期 no 和 no 或 txt 和代码

java - 将位图设置为 TextView 的背景 - Android

java - 我如何在java中制定jess规则

java - 在字符串变量中获取 CLIPS/Jess 输出

java - 无法运行程序 “docker” error = 2,没有这样的文件或目录

java - 如何通过 Javadocs 中的参数引用正确指定返回

java - 在 if 语句中使用 boolean 方法时遇到问题

java - 我如何制作影子事实?

java - jar包中Jess engine.batch失败