【问题标题】:Prolog embedding in java helpProlog嵌入java帮助
【发布时间】:2013-02-14 19:32:13
【问题描述】:

|有一个用 prolog 编写的过滤器,我想将它嵌入到我的网络服务中。我在后端使用 JAVA,我希望在此处添加过滤器。我正在使用 tomcat 作为我的应用程序服务器。谁能推荐一个好方法。我知道 JPL,可悲的是我无法让它工作。

【问题讨论】:

  • 您的问题应该与 JPL 问题有关,确保包含您看到的错误

标签: java prolog


【解决方案1】:

如果你想将你的 Prolog 引擎嵌入到 Java 本身中,总会有tuProlog。其他替代方案包括概念相似的JLog 或更编译的Prolog Cafe

另一种选择,也许更远一点(它肯定会涉及到你的一些移植工作)是使用Mercury 语言——它有一个非常类似于 Prolog 的语法,但实际上不是 Prolog——它功能,除其他外,Java 后端和相应的 Java FFI。

【讨论】:

    【解决方案2】:

    你想要做什么并不是很明显,所以我假设你真的只是想弄清楚如何启动你的 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.getOutputStream()(这将是您对 Prolog 输入的输出)。同样,如果你想得到Prolog的输出和错误,你需要使用Process.getInputStream()Process.getErrorStream()

    我过去曾混淆过那些输入和输出流,但我仍然希望我能回到我生命中的那些时光......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-15
      • 2010-12-20
      相关资源
      最近更新 更多