【问题标题】:tuprolog and Definite Clause Grammarstuprolog 和定从句语法
【发布时间】:2013-05-14 10:57:16
【问题描述】:

我正在使用 tuProlog (http://tuprolog.alice.unibo.it/) 从 java 内部运行一些 prolog 子句。我在使用定句语法时遇到了一些问题,我认为 Stackoverflow 可能是正确的地方。

使用来自http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse29 的定句语法示例,我们有

s  -->  np,vp . 
np  -->  det,n. 
vp  -->  v,np. 
vp  -->  v. 
det  -->  [the]. 
det  -->  [a]. 
n  -->  [woman]. 
n  -->  [man]. 
v  -->  [shoots].

我用下面的 java 代码把它引入 tuProlog(已经在其他 prolog 示例中测试过)

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import alice.tuprolog.NoMoreSolutionException;
import alice.tuprolog.NoSolutionException;
import alice.tuprolog.Prolog;
import alice.tuprolog.SolveInfo;
import alice.tuprolog.Theory;

public class TestDefinateClauseGrammar {
    public static void main(String[] args) throws Exception {
        Prolog engine = new Prolog();
        engine.addTheory(new Theory(readFile("/Users/josephreddington/Documents/workspace/com.plancomps.prolog.helloworld/grammar.pl")));
    }

    private static String readFile(String file) throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader(file));
        String line = null;
        StringBuilder stringBuilder = new StringBuilder();
        String ls = System.getProperty("line.separator");
        while ((line = reader.readLine()) != null) {
            stringBuilder.append(line);
            stringBuilder.append(ls);
        }
        return stringBuilder.toString();
    }
}

但不幸的是我得到了例外:

Exception in thread "main" alice.tuprolog.InvalidTheoryException: The term 's' is not ended with a period.
    at alice.tuprolog.TheoryManager.consult(TheoryManager.java:193)
    at alice.tuprolog.Prolog.addTheory(Prolog.java:242)
    at TestDefinateClauseGrammar.main(TestDefinateClauseGrammar.java:13) 

谁能告诉我这个问题?我知道 tuprolog 应该支持定句语法,因为他们的手册 (http://tuprolog.sourceforge.net/doc/2p-guide.pdf) 包含以下引用:

5.2 ISOLibrary
Library Dependencies: BasicLibrary.
This library contains almost1 all the built-in predicates and functors that
are part of the ISO standard and that are not part directly of the tuProlog
core engine or other core libraries. Moreover, some features are added, not
currently ISO, such as the support for definite clause grammars (DCGs).

欢迎提出想法....

【问题讨论】:

  • 可能是序言列表第一行结束句点之前的空格?

标签: java prolog tuprolog


【解决方案1】:

您必须显式加载 DCG 库,因为默认情况下不加载它。

您可以通过两种方式做到这一点:

  1. 在理论中使用 load_library 指令,例如: :-load_library('alice.tuprolog.lib.DCGLibrary').
  2. 在引擎上调用加载库方法:engine.loadLibrary("alice.tuprolog.lib.DCGLibrary")

请参阅此处的 Google 代码存储库 (https://code.google.com/p/tuprolog/),您可以在其中找到引擎和手册的最新版本。

干杯

麦芽酒

【讨论】:

【解决方案2】:

所以我通过电子邮件得到了这个答案(可能对其他人有用......)

您的例外意味着您的序言理论没有按原样编写 预计在 2Prolog 中。为了测试您的序言代码,您可以运行 2p.jar ...它会打开一个 GUI,告诉您错误在哪里。来自java 你不能完全理解发生了什么。有没有可能你 想写类似:s:-np,vp?我没用过 --> 2Prolog 中的符号,我认为这是不可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多