我的剪辑文件包含(printout t"text")
和bind ?var (read)
语句。如果我从C代码下面运行.clp文件,该程序将打印到控制台并按预期从控制台读取我的输入,从而使它成为程序和用户之间的交互式会话。
#include "clipscpp.h"
#include <iostream>
#include<stdlib.h>
using namespace std;
int main()
{
CLIPS::CLIPSCPPEnv theEnv;
theEnv.Load("KB.clp");
theEnv.Reset();
theEnv.Run(-1);
return 0;
}
但是,如果我尝试使用PyCLIPS在python中加载.clp,则(printout)
和(read)
均无效,程序将不执行任何操作而终止。
import clips
clips.Load("KB.clp")
clips.Clear()
clips.Reset()
clips.Run(-1)
我如何获得与从C运行相同的结果?
答案 0 :(得分:0)
PyCLIPS的常见问题解答(http://pyclips.sourceforge.net/web/?q=view/faq)建议您使用Python函数来处理I / O。
答案 1 :(得分:0)
我建议这样的事情:
def parse_trace_stream(trace_stream):
...
"""Print trace_stream"""
def parse_stdout_stream(stdout_stream):
...
"""Print stdout_stream"""
def parse_error_stream(error_stream):
...
"""Print error_stream"""
def evaluate(str):
if str.count("(") == str.count(")"):
try:
clips.Eval(str)
except:
parse_error_stream(clips.ErrorStream.Read())
parse_stdout_stream(clips.StdoutStream.Read())
parse_trace_stream(clips.TraceStream.Read())
之后,您可以编写更多类似于CLIPS的代码:
evaluate("(load KB.clp)")
evaluate("(clear)")
evaluate("(reset)")
evaluate("(run -1)")