首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >剪辑/剪辑间谍规则顺序

剪辑/剪辑间谍规则顺序
EN

Stack Overflow用户
提问于 2020-11-14 11:12:44
回答 1查看 95关注 0票数 0

所以我试着自学CLIPS和clipspy来完成一次课堂作业,但是我有点卡住了。下面的代码可以很好地编译和运行,但是输出有点奇怪。我正在尝试扩展我在手册中找到的示例。

代码语言:javascript
复制
import clips
import logging

env = clips.Environment()

logging.basicConfig(level=10, format='%(message)s')
router = clips.LoggingRouter()
router.add_to_environment(env)

env.build("""
(defrule whodunit
  (shoot ?hunter ?who)
  =>
  (printout t ?hunter " shot " ?who crlf)
)""")

env.build("""
(defrule animalGame
  (animal ?ani)
  (shoot $? ?ani)
  =>
  (assert (game ?ani))
)""")

env.build("""
(defrule gameAnimal
  (game ?ani)
  =>
  (assert (animal ?ani))
)""")

env.build("""
(defrule isIllegal
  (shoot ?a ?b)
  (not(game ?b))
  =>
  (assert (criminal ?a))
)""")

env.assert_string("(animal duck)")
env.assert_string("(animal dog)")
env.assert_string("(shoot Brian duck)")
env.assert_string("(shoot Bob rhino)")
env.assert_string("(game deer)")

env.run()

for fact in env.facts():
    print(fact)

这将输出以下内容:

代码语言:javascript
复制
(initial-fact)
(animal duck)
(animal dog)
(shoot Brian duck)
(shoot Bob rhino)
(game deer)
(animal deer)
(criminal Bob)
(criminal Brian)
(game duck)

似乎Brian被贴上了罪犯的标签,因为他射杀了一只非游戏的动物,尽管他正在射杀的动物在下一步被宣布为游戏。有没有办法重新评估规则来解决这个矛盾?

EN

回答 1

Stack Overflow用户

发布于 2020-11-14 11:24:50

我想通了。答案是显着性。我也意识到有一些逻辑上的缺陷/不一致,将所有被猎杀的动物宣布为猎物,并将射杀非游戏的动物指控为犯罪。不管怎样:

代码语言:javascript
复制
env.build("""
(defrule animalGame
  (declare (salience 100))
  (animal ?ani)
  (shoot $? ?ani)
  =>
  (assert (game ?ani))
)""")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64830582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档