Как использовать PyCLIPS для интерактивных сессий?
Мой файл клипа содержит (printout t"text")
а также bind ?var (read)
заявления. Если я запускаю файл.clp из-под кода C, программа печатает на консоль и считывает мой ввод с консоли, как и ожидалось, что делает его интерактивным сеансом между программой и пользователем.
#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;
}
Но, если я попытаюсь загрузить.clp в python, используя PyCLIPS, ни (printout)
ни (read)
работает и программа завершает работу, ничего не делая.
import clips
clips.Load("KB.clp")
clips.Clear()
clips.Reset()
clips.Run(-1)
Как я могу достичь того же результата, что и запуск из C?
2 ответа
Я хотел бы предложить что-то вроде этого:
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)")
В FAQ для PyCLIPS ( http://pyclips.sourceforge.net/web/?q=view/faq) предлагается использовать функции Python для обработки ввода-вывода.