使用 JPL 查询 Prolog 变量

2024-01-23

我想通过JPL进行查询以在java中使用Prolog,我阅读了文档(http://www.swi-prolog.org/packages/jpl/java_api/getting_started.html) prolog 谓词如下:

child_of(joe, ralf).
child_of(mary, joe).
child_of(steve, joe).
child_of(steve, ralf).

descendent_of(X, Y) :-
    child_of(X, Y).
descendent_of(X, Y) :-
    child_of(Z, Y),
descendent_of(X, Z).

我的代码看起来像这样

Variable X = new Variable();

        Query q4 =
            new Query(
                "descendent_of",
                new Term[] {X,new Atom("joe")}
            );

        java.util.Hashtable solution;

        while ( q4.hasMoreSolutions() ){
            solution = q4.nextSolution();
            System.out.println( "X = " + solution.get(X));
        }

根据我的序言谓词,我的 java 代码应该检索“玛丽”和“史蒂夫”,但我得到了这个:

X = null
X = null

我做错了什么?提前致谢

EDIT: 这是我的整个测试

Query q1 =
    new Query(
        "consult",
        new Term[] {new Atom("C:\\Users\\cardozo\\Documents\\fer\\info2\\lore\\test.pl")}
    );

return q1;

System.out.println( "consult " + (q.query() ? "succeeded" : "failed"));

Query q2 =
    new Query(
        "child_of",
        new Term[] {new Atom("joe"),new Atom("X")}
    );
Boolean resp= q2.query();
System.out.println("child_of(joe,X) is " + resp.toString()
);

Query q3 =
    new Query(
        "descendent_of",
        new Term[] {new Atom("steve"),new Atom("ralf")}
    );

System.out.println(
    "descendent_of(joe,ralf) is " +
    ( q3.query() ? "provable" : "not provable" )
);

Variable X = new Variable();

Query q4 =
    new Query(
        "descendent_of",
        new Term[] {X,new Atom("joe")}
    );

java.util.Hashtable solution;

q4.query();

while ( q4.hasMoreSolutions() ){
    solution = q4.nextSolution();
    System.out.println( "X = " + solution.get("X"));
}

这就是我在 java 控制台中得到的结果

run:
% C:\Users\cardozo\Documents\fer\info2\lore\test.pl compiled 0.00 sec, 8 clauses
consult succeeded
child_of(joe,X) is false
descendent_of(joe,ralf) is provable
X = null
X = null
BUILD SUCCESSFUL (total time: 0 seconds)

我找到了解决方案,我必须像这样使用复合类(包含在 jpl 中)

Query q4 = new Query(new Compound("descendent_of", new Term[] { new Variable("X"), new Atom("joe")}));

while ( q4.hasMoreSolutions() ){
            solution = q4.nextSolution();
            System.out.println( "X = " + solution.get("X"));
        }

我得到了解决方案

X = mary
X = steve
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JPL 查询 Prolog 变量 的相关文章

随机推荐

  • 启动 Facebook 转换像素

    我对 Javascript 还很陌生 但我想知道在不实际加载 确认 谢谢 页面的情况下触发 Facebook 转换像素 如下 的最佳方法是什么
  • Android 本地服务器套接字

    在android中 有两个类LocalServerSocket和LocalSocket 我认为它们类似于unix套接字中的AF LOCAL 我不确定它是否正确 我的问题是 是否可以在Java中创建LocalServerSocket并使用普通
  • Unity 在使用 Firebase 数据库进行异步编程时崩溃

    当我尝试这样做时它崩溃了 我想要异步获取用户数据 如果我不使用异步任务 它会返回 null public class Database MonoBehaviour private DatabaseReference m database p
  • Vue.js 中的计算属性未使用 navigator.onLine 更新

    我想使用 Vue js 计算属性来查看我的应用程序的在线状态 基本上 我有以下 Vue 设置 new Vue el app computed onLine function return navigator onLine 以及以下标记 di
  • 安装后如何更改应用程序的图标和标签?

    我正在尝试在安装应用程序后更改其图标和标签 在清单中 我放置了以下代码
  • UTF-8 的多字节安全 wordwrap() 函数

    PHP s wordwrap https www php net wordwrap对于 UTF 8 等多字节字符串 该函数无法正常工作 评论中有一些mb安全函数的例子 但是根据一些不同的测试数据 它们似乎都存在一些问题 该函数应采用与以下完
  • Ionic Android 构建停止工作

    更新 Ionic 和 Cordova CLI 后 我的 Ionic Cordova 应用程序突然停止在 Android 上构建 过去两天我在谷歌上搜索解决方案 但找不到任何有帮助的东西 我假设这与 Cordova 现在使用 Gradle 来
  • 根据字段的值使用不同的 Pydantic 模型

    我有 2 个 Pydantic 模型 var1 and var2 输入的PostExample方法可以接收第一个模型或第二个模型的数据 指某东西的用途Union有助于解决这个问题 但在验证过程中 它会引发第一个和第二个模型的错误 如何做到在
  • 计算减法后剩余多边形的算法

    我有一个大多边形 Pa 多边形内部有很多小 洞 如图 以下是开孔的几个条件 孔不能互相重叠 孔不能超出外多边形 然而 这些洞can触摸多边形的外边 如何高效地获取剩余的多边形 或多边形列表 最简单的方法 蛮力方法 是采取Pa 并通过减去孔逐
  • json.Unmarshal 不返回解码数据[重复]

    这个问题在这里已经有答案了 我在解组从 a 读取的 json 数据时遇到问题 json file type redisConfig struct host string password string func loadRedisConfi
  • 我可以为主键设置ignore_dup_key吗?

    我的表上有一个两列主键 我试图改变它来设置ignore dup key继续使用此命令 ALTER INDEX PK mypk on MyTable SET IGNORE DUP KEY ON 但我收到这个错误 Cannot use inde
  • 循环依赖最佳实践

    我目前正在编写一个网络爬虫 它从互联网上检索信息 简化后看起来像这样 数据访问项目 检索原始数据的对象 将原始数据解析为对象的对象 解析器返回的实体 现在 我正在创建实际的解析器 我将像这样使用它 using Application Dat
  • 为什么我在 Android 设备上无法接收来自 GCM 的消息

    我正在创建一个 android 应用程序 我需要在其中发送 gcm 消息 到目前为止我设法得到设备ID并将其发送到我的服务器 现在 当我尝试将消息从服 务器推送到我的应用程序时 我收到以下消息 multicast id 4987023356
  • EXC_BAD_ACCESS,代码 1,iOS 7.0.x 64 位设备

    我目前正在开发的应用程序在模拟器上完美运行 但自从 Xcode 升级到 5 1 后 我在设备上运行应用程序时遇到问题 如果我在任何 iOS 上的任何非 64 位设备上运行应用程序 它都可以正常运行 但如果我在 64 位设备 iPhone 5
  • 硒页面对象。如何从外部源读取@FindBy定位器?

    我只能在页面对象 FindBy 注释中使用硬编码值 但我想动态解析定位器 public class LoginPage extends BasePage hardocded value works ok FindBy name login
  • 如何正确解析在 ASP.NET Core 3.1 中的ConfigureServices() 中使用的服务?

    我有一个基于 ASP NET Core 3 1 的应用程序 在应用程序启动期间 在ConfigureServices IServiceCollection services 我想注册我的服务 但在配置服务期间 我想根据数据库中找到的设置启动
  • 如何在 Quartz.Net 中让 Job 引发 EventHandler?

    我有一个实例化 Quartz Scheduler 的控制台应用程序 我希望作业能够引发事件处理程序 以便 母应用程序 调用特定的方法 问题是 Job 类似乎与外部类明显是相当隔离的 我确信有一个好方法可以做到这一点 但我还没有偶然发现它 p
  • 如何使用 Visual Studio 2010 从源代码构建 MFC 库

    Visual Studio 历史上始终包含 MFC 库作为源 因此您可以使用提供的 makefile 自行构建它 但在 Visual Studio 2010 中没有 MFC 的 makefile 那么 如何重建它呢 MS 上有文档暗示 ma
  • 使用 jquery 添加和删除 div 的样式属性

    我继承了我正在从事的一个项目 并且正在更新一些 jquery 动画 很少使用 jquery 练习 我有一个 div 需要添加和删除样式属性 这是 div div 在动画中的某个时刻 我需要为其添加一种样式 div 我四处搜寻并找到了 rem
  • 使用 JPL 查询 Prolog 变量

    我想通过JPL进行查询以在java中使用Prolog 我阅读了文档 http www swi prolog org packages jpl java api getting started html prolog 谓词如下 child o