0

我的剪辑文件包含(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 运行相同的结果?

4

2 回答 2

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)")
于 2018-12-13T08:45:41.537 回答
0

PyCLIPS 的常见问题解答 ( http://pyclips.sourceforge.net/web/?q=view/faq ) 建议您使用 Python 函数来处理 I/O。

于 2018-12-13T07:10:00.727 回答