|有一个用prolog编写的过滤器,我想嵌入我的网络服务。我在后端使用JAVA,我希望在这里添加过滤器。我使用tomcat作为我的应用服务器。任何人都可以建议一个好方法。我知道JPL,可悲的是我无法让它工作。
答案 0 :(得分:2)
如果您想将Prolog引擎嵌入Java本身,总会有tuProlog。其他替代方案包括类似概念JLog或更多编译Prolog Cafe。
另一个替代方案,也许更远一点(它肯定会涉及到你的一些移植工作)是使用Mercury语言 - 它有一个非常Prolog-ish语法,但实际上并不是Prolog - 其中包括Java后端和相应的Java FFI。
答案 1 :(得分:0)
你想要做的事情并不是很明显,所以我会假设你真的只是想弄清楚如何启动你的Prolog代码并得到结果。
如果是这种情况,Java提供Process类:
ProcessBuilder.start()和 Runtime.exec方法创建本机 处理并返回一个实例 可以使用的Process的子类 控制过程并获得 有关它的信息。班级 流程提供方法 执行来自流程的输入, 执行输出到进程, 等待过程完成, 检查的退出状态 过程,并摧毁(杀死) 过程
可能更直接有用的是ProcessBuilder:这允许您创建一个完整的工作环境(包括环境变量),它们可以模拟您现在可能正在测试的命令行。引自Javadoc:
ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
env.remove("OTHERVAR");
env.put("VAR2", env.get("VAR1") + "suffix");
pb.directory(new File("myDir"));
Process p = pb.start();
请记住,如果要将信息传递给您创建的Process,则需要使用Process.getOutputStream()(这将是Prolog输入的输出)。同样,如果您想获得Prolog的输出和错误,则需要使用Process.getInputStream()
和Process.getErrorStream()
。
我过去曾混淆那些输入和输出流,但仍然希望我可以回到生命中的那些时间......