1

假设我有以下代码,它It works!使用 predicate 打印一个术语是否是一个字符串string/1

Term string = org.jpl7.Util.textToTerm("\"test\"");
Query testQuery = new Query("string",string);

if(testQuery.hasMoreSolutions()) {
    System.out.println("It works!");
}

这不会打印任何东西,这不是我所期望的。

更奇怪的是,用new Query("atom",string)now 替换查询确实可以正常工作,这意味着字符串作为原子而不是 SWI-Prolog 7 字符串传递,即使我给 JPL 库解析的文本使用了作为字符串的双引号定界符,而不是原子定界符。

更奇怪的是,Java 调试器告诉我 Termstring有 name test(不带引号)和 type string!所以textToTerm似乎产生了一个正确的字符串,但是 Term 本身还是作为原子传递的!

这是一个错误,还是默认行为?

编辑: JPL 7 文档指出

SWI Prolog V7 字符串在 JPL7 中表示为类型为“字符串”的原子

那么就没有办法将真正的字符串传递给查询吗?

4

0 回答 0