[英]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.