如果我执行类似 Watch(theEnv, FACTS); 的操作,默认情况下此调试会写入 STDOUT,并且看起来我无法更改它。我想将其写入一个单独的文件,我该怎么做?这是在使用。 6.41 剪辑
使用“Watch(theEnv, FACTS);”有内容打印到 STDOUT,但需要写入不同的文件。
没有机制可以更改手表信息的写入位置。您可以使用 dribble-on/dribble-off 功能来捕获发送到 STDIN/STDOUT 的 I/O,但这将捕获到 STDIN/STDOUT 的所有 I/O。
您必须修改 CLIPS 源代码才能重定向输出。 factmngr.c 中有两个位置打印事实的手表信息:
WriteString(theEnv,STDOUT,"==> ");
PrintFactWithIdentifier(theEnv,STDOUT,theFact,changeMap);
WriteString(theEnv,STDOUT,"\n");
WriteString(theEnv,STDOUT,"<== ");
PrintFactWithIdentifier(theEnv,STDOUT,theFact,changeMap);
WriteString(theEnv,STDOUT,"\n");
您可以将 STDOUT 替换为最初设置为 STDOUT 的 char * 变量,然后添加一个用户定义的函数,该函数允许您将该变量设置为不同的字符串。然后,您可以使用 open 函数打开文件,然后将变量设置为 open 函数中使用的逻辑名称。