首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyClips clips.BatchStar()和Clips (批.)不要一起工作

PyClips clips.BatchStar()和Clips (批.)不要一起工作
EN

Stack Overflow用户
提问于 2017-03-28 17:31:05
回答 1查看 192关注 0票数 0

我有三个文件:

1.)python文件test.py

代码语言:javascript
复制
import clips
PATH_TO_CLP_FILE = r'd:\temp\batch_bug.clp'
clips.BatchStar(PATH_TO_CLP_FILE)
clips.PrintFacts()

2.)文件batch_bug.clp

代码语言:javascript
复制
(assert (asdf0))
(batch "D:\\temp\\batchbug2.clp")
(assert (asdf1))
(printout t (facts))

最后是一个文件batchbug2.clp

代码语言:javascript
复制
(assert (fdsa))

运行python test.py将产生以下输出:

代码语言:javascript
复制
f-0     (initial-fact)
f-1     (asdf0)
f-2     (asdf1)
For a total of 3 facts.

[ENVRNMNT8] Environment data not fully deallocated.

[ENVRNMNT8] MemoryAmount = 22.

[ENVRNMNT8] MemoryCalls = 1.

这不是我所期望的,因为没有(fdsa)事实,即调用(batch "D:\\temp\\batchbug2.clp")不起作用。此外,还有[ENVRNMNT8]消息。这里发生什么事情?

编辑:

我发现了CLIPS batch*(...)命令。使用它代替batch(...)可以像预期的那样工作。为什么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-29 19:18:55

批处理命令打开一个文件,并在从标准输入(键盘)请求字符时使用它的内容。当您交互地使用CLIPS时,字符请求是由读/评估/打印循环( CLIPS>命令提示符)以及代码中的任何读取或读行函数调用从标准输入发出的。

当您像在这个PyCLIPS示例中一样嵌入CLIPS时,没有读取/评估/打印循环,因此从标准输入中对字符的唯一请求将来自读和读行函数。因为这个例子没有从标准输入中发出任何字符请求,所以批处理文件的内容从未被处理过。

批处理*命令打开一个文件,直接将其内容解析为命令,然后立即执行它们--不需要从标准输入中请求字符才能执行命令。

批处理命令对于从命令提示符运行测试用例非常有用,因为您可以模拟所有键盘输入。如果您不能立即访问命令提示符(因为您正在嵌入剪辑或剪辑当前正在执行),或者您不希望执行的命令及其返回值与标准输出相呼应,批处理*命令对于运行命令脚本非常有用。

当CLIPS退出并确定所有分配的内存未被正确释放时,将发生ENVRNMNT8错误消息。在本例中,未处理的批处理文件的解除分配代码中存在一个错误,它没有释放包含批处理文件名的字符串(对于CLIPS 6.30)。在SourceForge的CLIPS SVN存储库中已经检出了一个修复程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43076156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档