问题标签 [pyclips]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
clips - CLIPS规则LHS中的Python函数多次调用-如何等待变量包含值?
我在这里阅读了如何在剪辑规则的 lhs 上调用 python 函数。
现在我有以下规则:
我的问题是python函数被调用了两次,第一次打印
some_slot:无
接着
some_slot: some_slot_value
似乎包含 python 函数的第二个规则部分不会“等待”匹配 LHS 规则的第一部分。
一旦匹配 LHS 规则的第一部分,如何让剪辑只调用一次 python 函数?换句话说,我想等到?some_slot_value
变量有值。
如果可能的话,我想避免创建多个规则并使用“控制事实”。
rule-engine - PyCLIPS:如何从错误中恢复
我正在使用 PyCLIPS 将 CLIPS 集成到应充当 ECA 服务器(事件条件操作)的程序中。有传入事件与系统状态一起,可能会或可能不会触发规则,然后在消息总线上发出操作。
系统状态以实例的形式表现出来,这些实例的插槽根据传入的事件进行修改。
该软件旨在成为一项长期服务,但当在执行规则期间发生错误时,例如通过错误命名的处理程序:
剪辑会话变得对新消息没有响应。插槽不再使用以下方式更新:
clips.DebugConfig.WatchAll()
即使没有调试输出,剪辑中也不会发生任何事情。
例子:
有没有可能避免这种情况或从这种状态中恢复?
python-2.7 - 为 Windows Python 2.7 32 位安装基于 CLIPS 6.30 的 PyCLIPS
我了解到有一个基于 CLIPS 版本 6.30 的 PyCLIPS 版本。相同(或相似)的 PyCLIPS 版本也可以通过 pip 安装,请参见此处。
在 Linux 上,这两种方法都可以正常工作,即通过 git clone + setup.py 或通过 pip 安装。在 Windows 上,它仅适用于 cygwin 64 位。pip install pyclips
失败(我想是由于缺少“-DWIN_MVC”标志,请参见下面的步骤 7)。
但是,我想在“常规”Windows python 上使用基于 CLIPS 6.30 的 PyCLIPS,准确地说是在 Windows 7 64 位上使用 Python2.7 32 位。我安装了 Visual Studio Express 2008。
我尝试了什么:
- git 克隆https://github.com/almostearthling/pyclips.git
- cd pyclips
- git checkout pyclips-1.1_clips-6.30
- 删除文件
clipssrc
- 从官方存储库下载 CLIPS 6.30 源代码
- 创建一个新文件夹 文件夹
clipssrc
内新创建的文件pyclips
夹 - 将文件夹内容解压
core
到clipssrc
文件夹中 - 在
setup.py
第 738 行左右,添加'-DWIN_MVC'
到CFLAGS
列表中 - 为 Windows 安装补丁实用程序并将其添加到 PATH
- 启动 Visual Studio Express 2008(32 位)命令提示符
- cd 进入
pyclips
文件夹 - 跑
python setup.py build
- 如果构建通过(它应该)安装通过
python setup.py install
尽管构建和安装都通过了,但大整数仍然会导致错误,就像 CLIPS 6.30 之前的版本一样。这意味着 CLIPS 无法处理大于2147483648
(sys.maxint+1
在 python 2.7 32 位上)的整数。
在使用 Visual Studio 2008 进行编译期间,我收到了警告“ conversion from '__int64' to 'long', possible loss of data
”。我将相应变量的类型更改为long long
. 警告消失了,但大整数的错误仍然存在。
如何在 Windows 7 64 位上安装基于 CLIPS 6.30 的 PyCLIPS 以与 32 位 Windows Python 2.7 一起使用?
编辑 1:我尝试使用 cygwin 32 位安装它 - 但它不起作用。所以也许这是一个 32/64 位的问题?32 位版本的剪辑(通过官方安装程序安装)在我的 Windows 7 64 位上运行良好...
编辑 2:它似乎适用于具有 sys.maxint 的 python 解释器,9223372036854775807
但不适用于具有 sys.maxint 的解释器2147483647
。有趣的是,即使是 64 位 Windows Python 也有后者的值。
概括:
- cygwin Python 64位,maxint:9223372036854775807,没有错误
- cygwin Python 32位,maxint:2147483647,错误
- Windows Python 2.7 32 位,最大值:2147483647,错误
- Windows Python 2.7 64 位,最大值:2147483647,错误
python - Python - 带有 CLIPS 的复杂问卷
我的页面上现在有一个相当大的问卷,大约有 50 个问题,其目的是查看用户是否可以成为我的相关客户。我想将其减少到 5 个或最多 10 个问题,方法是在每个步骤中只提出相关问题,并根据他在之前问题中的回答(不仅仅是最后一个问题)生成一个新问题。我有一张关于我希望如何连接问题的图表,并且我在 CLIPS 中也有一些伪代码,它们基本上做得很好。问题是,我发现的唯一可以加载 CLIPS 的 python 包(PyCLIPS)仅在 Python 2.5 上运行,并且几年没有更新,所以 CLIPS 现在不是一个很好的选择。
我在这里看到了另一个关于类似内容的问题(哪些库用于在 Python 中对复杂问卷进行建模?)但答案是使用自动机,这对我来说并不是很好,因为我还将获得数字答案和其他先前答案的逻辑组合.
是否有其他一些包可以做类似的事情或以其他方式将 CLIPS(或其他专家系统)连接到 python?
pytest - CLIPS(清除)命令失败/在 pyclips 中引发异常
我有一个 pyclips / clips 程序,我使用 pytest 为其编写了一些单元测试。每个测试用例都包含一个初始clips.Clear()
值,然后是通过clips.Load(rule_file.clp)
. 单独运行每个测试都可以正常工作。
然而,当告诉 pytest 运行所有测试时,有些失败并显示ClipsError: S03: environment could not be cleared
. 实际上,这取决于 .py 文件中测试的顺序。似乎有测试用例导致后续测试用例抛出异常。
也许某些剪辑代码仍在“使用中”,因此清除失败?我在这里读到(clear)
清除 CLIPS。从 CLIPS 环境中删除所有构造和所有关联的数据结构(例如事实和实例)。可以随时安全地执行清除,但是,某些构造在使用时不允许自己被删除。
这里可能是这种情况吗?是什么导致(clear)
命令失败?
编辑:
我能够缩小问题的范围。在以下情况下会发生:
test_case_A 在 test_case_B 之前。在 test_case_A 中有一个test
例如
但f_bio_puts
已设置为
(slot f_bio_puts (default [nil]))
所以测试一个槽变量的类型,它已经设置为[nil]
最初,似乎会导致(clear)
命令失败。有任何想法吗?
编辑 2
我想我知道是什么导致了这个问题。这是test
线。我调整了我的代码以使其在剪辑对话框窗口中运行。我在加载时遇到了这个错误(batch ...)
我想这是被掩盖的 pyclips 的错误。
clips - PyClips clips.BatchStar() 和 Clips (batch ...) 不能一起工作
我有三个文件:
1.)一个python文件test.py
:
2.)一个文件batch_bug.clp
:
最后是一个文件batchbug2.clp
:
运行python test.py
结果如下:
这不是我所期望的,因为没有(fdsa)
事实,即调用(batch "D:\\temp\\batchbug2.clp")
不起作用。此外,还有留[ENVRNMNT8]
言。这里发生了什么?
编辑:
我发现了 CLIPSbatch*(...)
命令。并使用它而不是batch(...)
按预期工作。这是为什么?
clips - 在正确设置插槽之前避免模式匹配(错误)
规则的 LHSR_blup
包含
也就是说,它检查是否?s2
大于或等于 2。?s2
对应于名为 的实例槽s2
。
不幸的是,我得到了错误
Function >= expected argument #1 to be of type integer or float
问题是我的代码(test ...
在我可以设置参数#1 之前执行,即在我可以设置s2
为整数或浮点值之前。s2
应该在由另一个规则触发的 python 调用中设置为整数R_blah
。
该错误是在属于另一个 rule 的另一个 python-call 中间触发的R_xyz
。这个 python 调用通过clips_instance.Slots["slot_name"] = some_value
.
这通常是如何处理的?我看到三个我不太喜欢的解决方案:
- 为 设置默认(整数)值
s2
。 - 修改
(test ...
以首先检查nil
。 - 添加另一个检查/规则以等待
s2
不再nil
是
是否有可能尝试/排除/传递错误?
python - Pyclips:将剪辑类实例多槽设置为 [] 时出错
我希望一个类实例的多槽成为一个空列表。我不确定 clips 或 pyclips 中是否存在错误,或者我是否做错了。
我收到此错误:
_clips.ClipsError: C09: unable to understand argument
堆栈跟踪:
clips - 如何使用 PyCLIPS 进行交互式会话?
我的剪辑文件包含(printout t"text")
和bind ?var (read)
语句。如果我从 C 代码下面运行 .clp 文件,程序将打印到控制台并按预期从控制台读取我的输入,从而使其成为程序和用户之间的交互式会话。
但是,如果我尝试使用 PyCLIPS 在 python 中加载 .clp,则既不工作(printout)
也不(read)
工作,程序终止而不做任何事情。
如何获得与从 C 运行相同的结果?