0

我想添加一个自动计数器作为属性,实际上使用 clipspy 这意味着第一个事实,你断言计数为 1,第二个为 2,依此类推。由于我是 Clips 规则和事实编码的初学者,所以我不知道如何添加它。如果有人可以帮助我解决此问题,请提前感谢您。以下是我的代码:

import clips

template_string = """
(deftemplate person
  (slot name (type STRING))
  (slot surname (type STRING)))
"""
Dict = {'name': 'John', 'surname': 'Doe' }

env = clips.Environment()
env.build(template_string)

template = env.find_template('person')
fact = template.assert_fact(**Dict)
assert_fact = fact

env.run()

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

1 回答 1

1

事实对象已经具有指示其断言位置的索引。

索引从 1 开始。

print(fact.index)

如果您想为事实本身添加一个增量计数器,您可以使用 a defglobal、 adeffunctiondefault-dynamic插槽的属性来完成。

(defglobal ?*counter* = 0)

(deffunction increase () 
  (bind ?*counter* (+ ?*counter* 1)))

(deftemplate person  
  (slot name (type STRING))  
  (slot surname (type STRING)) 
  (slot counter (type INTEGER) (default-dynamic (increase))))   

(assert (person (name "John") (surname "Doe")))
于 2021-09-27T12:38:49.087 回答