2013-05-14 78 views
0

我使用tuProlog(http://tuprolog.alice.unibo.it/)從java內部運行一些prolog子句。我在定義語句語法中遇到了一些問題,我認爲Stackoverflow可能是正確的地方。tuprolog和確定子句語法

使用從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]. 

我拉到這個tuProlog與下面的Java代碼(已在其他序言實例測試)

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). 

想法表示歡迎....

+1

也許是在序言上市的第一行期末前空間? – 2013-05-14 11:25:28

回答

2

您必須明確加載DCG庫,因爲默認情況下它未加載。

你可以做到這一點有兩種方式:

  1. 使用load_library指令理論裏面,如: :-load_library('alice.tuprolog.lib.DCGLibrary').
  2. 呼叫發動機的負荷庫方法:engine.loadLibrary("alice.tuprolog.lib.DCGLibrary")

請參閱到Google代碼庫(https://code.google.com/p/tuprolog/),您可以在這裏找到最新版本的引擎和手冊。

乾杯

啤酒

+0

完美! (雖然只有第二個替代工作)非常感謝你:) – Joe 2013-05-21 14:49:21

+0

你可能會對這個問題感興趣... http://stackoverflow.com/q/16895960/170243 – Joe 2013-06-03 11:46:46

0

所以我通過電子郵件得到的回答這個(可能是有用的其他人...)

你的例外意味着你的序言理論不會被編寫,因爲它是在2Prolog中預期的 。爲了測試您的prolog代碼,您可以運行 2p.jar ...它會打開一個GUI,告訴您錯誤在哪裏。從java 你不能完全理解發生了什麼。是否有可能你想寫下類似於:s:-np,vp?我從未在2Prolog中使用 - > 表示法,我認爲這不可能。