在clipspy中,如何从python类或def函数中获取Assert事实?

z3yyvxxp  于 2023-02-06  发布在  Python
关注(0)|答案(1)|浏览(119)

我想创建一个Maven系统程序来做职业安全风险分析。我用CLIPS编写了这个程序。为了创建GUI并添加新的属性,我想用Python和clipspy和tkinter库重新编写。在这个程序中,根据用户的回答来决定和询问下一个问题。由于有很多问题,我需要定义更多的函数来Assert可以在其他defrule函数中使用的事实。但是,当我在类或def函数中使用assert_fact“函数时,我的下一个defrule函数无法调用它。在这种情况下,我需要你的帮助关于如何使用Python类或def函数assert_fact函数。你可以看到下面的一个例子:

olasılık = """ (deftemplate olasılık
        (slot ad (type SYMBOL))
        (slot deger (type NUMBER)))"""
env.build(olasılık)
def sonuç():
   print("değer 1 dopru")
   sr.assert_fact(ad=clips.Symbol("olasılık1"), deger=10)
   
def rule():

    rule = """(defrule rule
        (olasılık 
             (ad ?ad)(deger ?deger))
        =>
        (printout t " deneme yapıyorum.     " ?ad "   adıdır   " (* 10 ?deger) crlf))"""
    env.build(rule)

我希望在这段代码中使用defrule函数,但是没有。

q8l4jmvw

q8l4jmvw1#

我不完全清楚问题是什么,你也没有提供一个完整的工作例子,所以我希望这将回答问题。
你的主处理器是clips.Environment类,这个类的对象代表一个CLIPS引擎示例,允许定义或加载构造。

env = clips.Environment()

# Define a Fact Template
env.build("""
(deftemplate example_fact
  (slot example_slot))
""")

# Define a Rule
env.build("""
(defrule example_rule
  (example_fact (example_slot ?value))
  =>
  (println t ?v))
""")

事实由其模板定义,模板充当factory object
因此,为了Assert一个事实,您需要检索它的模板对象并使用它Assert一个新的事实。

# Retrieve the template of the fact you want to assert
template = env.find_template('example_fact')

# Assert 3 different `example_fact`
template.assert_fact(example_slot="foo")
template.assert_fact(example_slot="bar")
template.assert_fact(example_slot="baz")

如果你想在Python函数中 Package Assert事实的逻辑,你可以做以下事情。

def assert_example_fact(slot_value):
    template = env.find_template('example_fact')
    template.assert_fact(example_slot=slot_value)

assert_example_fact("foo")
assert_example_fact("bar")
assert_example_fact("baz")

如果要泛化上述函数:

def assert_fact(template_name, **slots):
    template = env.find_template(template_name)
    template.assert_fact(**slots)

assert_fact('example_fact', example_slot="foo")
assert_fact('different_fact', different_slot="bar", another_slot="baz")

相关问题