【问题标题】:JPL textToTerm only produces anonymous variablesJPL textToTerm 只产生匿名变量
【发布时间】:2015-11-29 14:57:08
【问题描述】:

我正在使用 JPL 在 Java 程序中执行一些 SWI-Prolog 查询。当我想创建一个新的查询时,我希望能够使用jpl.Util.textToTerm 直接从用户输入中实例化术语,而无需自己进行解析。

问题在于,这种方法似乎总是将变量标识符(即以大写字母开头的东西)解析为匿名变量(即以_ 开头的东西)。

例如,jpl.Util.textToTerm("X") 返回名称为 _1 而不是 Xjpl.Variable,这显然是个问题,因为这意味着查询后我将无法访问任何绑定。

直接从字符串创建jpl.Query,如new Query("reverse([1,2],X)") 有完全相同的问题。

【问题讨论】:

    标签: java prolog swi-prolog jpl


    【解决方案1】:

    _1不是匿名变量,所以问题并不像乍一看那么重要。

    具有相同名称的变量(实际上是 same 变量)从 JPL 接口返回后将具有相同的表示形式。否则,您应该提交邮件列表的错误...

    您应该使用read_term 谓词系列作为选项variable_names(Vars) 传递。例如,在 REPL 上

    ?- read_term_from_atom('a(X,Y,X)',T,[variable_names(L)]).
    T = a(_G1434, _G1435, _G1434),
    L = ['X'=_G1434, 'Y'=_G1435].
    

    编辑重用 JPL 测试基础设施的快速测试(我已将文件命名为 TestQuery.java)

    import java.util.Map;
    
    import org.jpl7.Query;
    import org.jpl7.Term;
    
    public class TestQuery {
        public static void main(String argv[]) {
            Query q = new Query("X = 1");
            Map<String, Term>[] solutions = q.allSolutions();
            System.out.println(solutions[0]);
        }
    }
    

    输出

    ./run.sh
    Compiling TestQuery
    
    JPL demo: TestQuery
    
    {X=1}
    

    所以,也许我一开始就不明白您的问题,抱歉...您使用的是最新安装吗?

    【讨论】:

    • 我不明白这有什么帮助。假设我创建了一个查询query = new Query("X = 1")query.nextSolution() 将返回一个空的 Hashtable,而不是包含绑定 X = 2 的。read_term_from_atom 与此有什么关系?
    • 您所描述的问题似乎与问题中要求的问题不同。哈希表应包含绑定 _1 = 1
    • 好吧,它没有,我在我的问题中指出“查询后我将无法访问任何绑定”。 _1 不是匿名变量 _ 但它就像一个 don't-want-to-know 变量。因为它是那种类型的变量,所以我在 hastable 中什么也没得到似乎是合乎逻辑的,我只是不明白为什么它被重命名为这个,当创建一个变量 new Variable("X") 工作正常时。
    • 使用allSolutions 我仍然得到一个空绑定。所以我猜它来自我的 JPL jar 或链接库。我看到你的 JPL 类在包 org.jpl7 中,而我的只是在 jpl 中。我从我的 SWI-Prolog 安装的 lib 和 bin 目录中获取了我的 jar 和链接库,但我看不到在哪里可以获取它们,JPL 网页上没有下载链接。
    • 这也可以解释为什么当我使用 JPL 对版本 7 字符串(带引号 ")运行查询时,它的行为就像一个将 " 视为字符代码的旧 SWI-Prolog 版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 2011-06-11
    相关资源
    最近更新 更多