发布于2024-03-09 13:32 阅读(450) 评论(0) 点赞(2) 收藏(1)
我用 Jess 编写了代码:
;;;*************
;;;* MODULES *
;;;*************
(defmodule EXAMPLE)
;;;*************
;;;* TEMPLATES *
;;;*************
(deftemplate EXAMPLE::status
(slot name)
(slot age)
)
;;;*************
;;;* FACTS *
;;;*************
(deffacts EXAMPLE::?x
(status (name Peter)
(age 24)
)
)
;;;***********************
;;;* GENERATE PATH RULES *
;;;***********************
(defrule EXAMPLE::rule1
?res <-
(status (name Peter)
(age 24)
)
=>
(printout t "Hello Peter" crlf)
(restract ?res)
)
(run)
如何从我的终端使用 ?x 调用规则。
因为我想找到名为 ?x 的事实并仅搜索该事实的规则。我希望我的条目类似于 (Peter) which Peter=?x 。
正确的方法是 (1) 使用显式触发事实,或 (2) 使用 adefquery
而不是 adefrule
—— 查询很像规则,只不过您可以显式调用查询。
第一种方法看起来像
(defrule EXAMPLE::rule1
(greet ?x)
?res <- (status (name ?x))
=>
(printout t "Hello, " ?x "!" crlf)
(retract ?res))
Jess> (assert (greet Peter))
<Fact-1>
Jess> (run)
Hello, Peter!
而第二个看起来像这样:
(defquery EXAMPLE::query1
(declare (variables ?x))
?res <- (status (name ?x))))
Jess> (bind ?result (run-query* EXAMPLE::query1 Peter))
Jess> (while (?result next)
(printout t "Hello, " (?result getString ?x) crlf)
(retract (?result getObject res)))
您可以在此处阅读有关查询的更多信息。
作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/686170/41a3eee7e3b874222af9/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!