簡體   English   中英

如何使用PyCLIPS進行交互式會話?

[英]How to use PyCLIPS for interactive sessions?

我的剪輯文件包含(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運行相同的結果?

PyCLIPS的常見問題解答( http://pyclips.sourceforge.net/web/?q=view/faq )建議您使用Python函數來處理I / O。

我建議這樣的事情:

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)")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM