使用clipspy提取事实的字符串表示形式时不一致

问题描述

刚开始在Python 3.8.3中使用clipspy-0.3.3。

提取事实时,在.facts()枚举器中遇到了不一致的情况。

下面的代码

import clips

env = clips.Environment()

env.assert_string("(value 1)")
env.assert_string("(value 2)")
env.assert_string("(value 3)")
env.assert_string("(value 4)")
env.assert_string("(value 5)")
env.assert_string("(value 6)")
env.assert_string("(value 7)")
env.assert_string("(value 8)")
env.assert_string("(value 9)")
env.assert_string("(value 10)")

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

产生结果

(initial-fact)
(value 1)
(value 2)
(value 3)
(value 4)
(value 5)
(value 6)
(value 7)
(value 8)
(value 9)
f-10    (value 10)

从中可以看到其中的矛盾之处

  • 数字少于10的事实,前面的f-1 从事实字符串中删除,并且
  • 数字等于或大于10的事实,前面的f-10 不会从事实字符串中删除

即使以上不一致之处都可以通过正则表达式替换来解决,如下所述

import re

for fact in env.facts():
    print(re.sub(r'^[^(]*',r'',str(fact)))

如果事实的字符串表示形式由.facts()包中的clispy枚举数一致地返回,那就太好了。

解决方法

这看起来像是clipspy中的错误,我建议您在其repository上打开一个问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...