tuprolog和Definite Clause Grammars

时间:2013-05-14 10:57:16

标签: java prolog tuprolog

我使用tuProlog(http://tuprolog.alice.unibo.it/)从java内部运行一些prolog子句。我对Definite Clause Grammars有一些问题,我认为Stackoverflow可能是正确的地方。

使用http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse29中的Definite Clause Grammar示例,我们有

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

我使用以下java代码(已在其他prolog示例中测试过)将其拉入tuProlog中

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应该支持Definite Clause Grammars,因为他们的手册(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).

欢迎创意......

2 个答案:

答案 0 :(得分:3)

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

您可以通过两种方式实现:

  1. 在理论中使用load_library指令,如: :-load_library('alice.tuprolog.lib.DCGLibrary').
  2. 在引擎上调用load library方法:engine.loadLibrary("alice.tuprolog.lib.DCGLibrary")
  3. 请参阅此处的Google代码存储库(https://code.google.com/p/tuprolog/),您可以在其中找到最新版本的引擎和手册。

    干杯

    啤酒

答案 1 :(得分:0)

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

  

您的例外意味着您的序言理论不是按原样编写的   预期2Prolog。为了测试您的prolog代码,您可以运行   2p.jar ...它打开一个GUI,告诉你错误的位置。来自java   你不太明白发生了什么。你有可能吗?   想写点像:s:-np,vp?我从未使用过 - >   2Prolog中的符号,我认为不可能。