首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPL textToTerm只产生匿名变量。

JPL textToTerm只产生匿名变量。
EN

Stack Overflow用户
提问于 2015-09-03 16:46:10
回答 1查看 257关注 0票数 3

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

问题是,该方法似乎总是将变量标识符(即以大写字母开头的内容)解析为匿名变量(即以_开头的变量)。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-03 19:05:10

_1 --它是而不是--一个匿名变量,所以这个问题不像乍一看上去那么重要。

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

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

代码语言:javascript
复制
?- read_term_from_atom('a(X,Y,X)',T,[variable_names(L)]).
T = a(_G1434, _G1435, _G1434),
L = ['X'=_G1434, 'Y'=_G1435].

使用JPL测试基础结构编辑一个快速测试,重用JPL测试基础结构(我已经将文件命名为TestQuery.java)

代码语言:javascript
复制
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]);
    }
}

输出

代码语言:javascript
复制
./run.sh
Compiling TestQuery

JPL demo: TestQuery

{X=1}

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32381298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档