问题标签 [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.

0 投票
1 回答
390 浏览

clips - CLIPS规则LHS中的Python函数多次调用-如何等待变量包含值?

在这里阅读了如何在剪辑规则的 lhs 上调用 python 函数。

现在我有以下规则:

我的问题是python函数被调用了两次,第一次打印

some_slot:无

接着

some_slot: some_slot_value

似乎包含 python 函数的第二个规则部分不会“等待”匹配 LHS 规则的第一部分。

一旦匹配 LHS 规则的第一部分,如何让剪辑只调用一次 python 函数?换句话说,我想等到?some_slot_value变量有值。

如果可能的话,我想避免创建多个规则并使用“控制事实”。

0 投票
0 回答
126 浏览

rule-engine - PyCLIPS:如何从错误中恢复

我正在使用 PyCLIPS 将 CLIPS 集成到应充当 ECA 服务器(事件条件操作)的程序中。有传入事件与系统状态一起,可能会或可能不会触发规则,然后在消息总线上发出操作。

系统状态以实例的形式表现出来,这些实例的插槽根据传入的事件进行修改。

该软件旨在成为一项长期服务,但当在执行规则期间发生错误时,例如通过错误命名的处理程序:

剪辑会话变得对新消息没有响应。插槽不再使用以下方式更新:

clips.DebugConfig.WatchAll()即使没有调试输出,剪辑中也不会发生任何事情。

例子:

有没有可能避免这种情况或从这种状态中恢复?

0 投票
0 回答
74 浏览

python-2.7 - 通过 PyCLIPS 将大数字(比 python 的 int 大)从 CLIPS 传递给 python

PyCLIPS 似乎在翻译非常大的数字之前将它们转换为 int。

请参阅此处进行转换 Python -> CLIPS

但也在这里用于转换 CLIPS -> Python

在 CLIPS 和 PyCLIPS 中都没有长久的类型,我说得对吗?是否将所有内容都转换(截断)为 int?这是一个错误吗?

我问是因为通过6442901632python 调用将值从 CLIPS 传递给 python 成为 python 中的值0x7fffffff。还是我的 32 位 Python 导致了这个问题?

如何int通过 PyClips 将大于 python 的值从 CLIPS 传递给 python?

0 投票
0 回答
1064 浏览

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。

我尝试了什么:

  1. git 克隆https://github.com/almostearthling/pyclips.git
  2. cd pyclips
  3. git checkout pyclips-1.1_clips-6.30
  4. 删除文件clipssrc
  5. 官方存储库下载 CLIPS 6.30 源代码
  6. 创建一个新文件夹 文件夹clipssrc内新创建的文件pyclips
  7. 将文件夹内容解压coreclipssrc文件夹中
  8. setup.py第 738 行左右,添加'-DWIN_MVC'CFLAGS列表中
  9. 为 Windows 安装补丁实用程序并将其添加到 PATH
  10. 启动 Visual Studio Express 2008(32 位)命令提示符
  11. cd 进入pyclips文件夹
  12. python setup.py build
  13. 如果构建通过(它应该)安装通过python setup.py install

尽管构建和安装都通过了,但大整数仍然会导致错误,就像 CLIPS 6.30 之前的版本一样。这意味着 CLIPS 无法处理大于2147483648sys.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,错误
0 投票
0 回答
140 浏览

python - Python - 带有 CLIPS 的复杂问卷

我的页面上现在有一个相当大的问卷,大约有 50 个问题,其目的是查看用户是否可以成为我的相关客户。我想将其减少到 5 个或最多 10 个问题,方法是在每个步骤中只提出相关问题,并根据他在之前问题中的回答(不仅仅是最后一个问题)生成一个新问题。我有一张关于我希望如何连接问题的图表,并且我在 CLIPS 中也有一些伪代码,它们基本上做得很好。问题是,我发现的唯一可以加载 CLIPS 的 python 包(PyCLIPS)仅在 Python 2.5 上运行,并且几年没有更新,所以 CLIPS 现在不是一个很好的选择。

我在这里看到了另一个关于类似内容的问题(哪些库用于在 Python 中对复杂问卷进行建模?)但答案是使用自动机,这对我来说并不是很好,因为我还将获得数字答案和其他先前答案的逻辑组合.

是否有其他一些包可以做类似的事情或以其他方式将 CLIPS(或其他专家系统)连接到 python?

0 投票
1 回答
154 浏览

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 的错误。

0 投票
1 回答
175 浏览

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(...)按预期工作。这是为什么?

0 投票
1 回答
84 浏览

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.

这通常是如何处理的?我看到三个我不太喜欢的解决方案:

  1. 为 设置默认(整数)值s2
  2. 修改(test ...以首先检查nil
  3. 添加另一个检查/规则以等待s2不再nil

是否有可能尝试/排除/传递错误?

0 投票
2 回答
173 浏览

python - Pyclips:将剪辑类实例多槽设置为 [] 时出错

我希望一个类实例的多槽成为一个空列表。我不确定 clips 或 pyclips 中是否存在错误,或者我是否做错了。

我收到此错误: _clips.ClipsError: C09: unable to understand argument

堆栈跟踪:

0 投票
2 回答
173 浏览

clips - 如何使用 PyCLIPS 进行交互式会话?

我的剪辑文件包含(printout t"text")bind ?var (read)语句。如果我从 C 代码下面运行 .clp 文件,程序将打印到控制台并按预期从控制台读取我的输入,从而使其成为程序和用户之间的交互式会话。

但是,如果我尝试使用 PyCLIPS 在 python 中加载 .clp,则既不工作(printout)也不(read)工作,程序终止而不做任何事情。

如何获得与从 C 运行相同的结果?