我正在尝试找到一种从正在运行的CLIPS程序获取目录列表的方法。最终目标是运行我的CLIPS程序,找到要加载到CLIPS中的一组事实文件,然后运行我的规则。
根据http://www2.cs.siu.edu/~rahimi/cs537/slides/big-2.pdf,我试过
(defrule list-the-directory
=>
(printout t (system “ls ” “*.txt”) crlf)
)
该函数调用在没有异常的情况下完成但未返回任何内容。
哦,我在Mac OS X上运行CLIPS 6.3。
提前感谢您的帮助。
伯尼
答案 0 :(得分:1)
CLIPS系统函数调用C系统库函数。系统调用的任何输出都将被定向到终端/控制台(C标准输出)。如果您将CLIPS作为终端/控制台应用程序运行,您将看到指向终端/控制台的输出。如果您正在使用CLIPS IDE,则不会看到C标准输出的任何输出,因为IDE对话框窗口正在捕获并直接从CLIPS显示输出。
如果将系统命令的输出定向到文件,则可以使用CLIPS I / O命令打开文件并打印其内容:
(defrule list-the-directory
=>
(system "ls > out.txt")
(open "out.txt" out "r")
(bind ?line (readline out))
(while (neq ?line EOF)
(printout t ?line crlf)
(bind ?line (readline out)))
(close out))
如果使用Load Constructs ...菜单命令加载规则,则目录将设置为包含规则的目录,您可以在创建和打开文件时指定部分目录路径。否则,您需要指定完整的文件路径。