2013-05-14 2 views
0

Я использую tuProlog (http://tuprolog.alice.unibo.it/) для запуска некоторых прологовых предложений изнутри java. У меня возникли проблемы с Grammars Definit Clause, и я думаю, что Stackoverflow может быть правильным местом.tuprolog and Definite Clause Grammars

Использования Определенного примера пункта Grammar от 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 (который был протестирован на других примерах 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). 

Идеи приветствуются ....

+1

Может быть, это место до окончания периода, в первой строке пролога списка? –

ответ

2

Вы должны загрузить библиотеку DCG явно, так как она не загружена по умолчанию.

Вы можете сделать это двумя способами:

  1. использовать load_library директиву внутри теории, как: :-load_library('alice.tuprolog.lib.DCGLibrary').
  2. вызова метод библиотека нагрузки на двигатель: engine.loadLibrary("alice.tuprolog.lib.DCGLibrary")

Пожалуйста, обратитесь в репозиторий Google Code здесь (https://code.google.com/p/tuprolog/), где вы можете найти самую последнюю версию движка и руководства.

Приветствие

Ale

+0

Отлично! (хотя только вторая альтернатива работала) Спасибо вам большое :) – Joe

+0

вам может быть интересно этот вопрос ... http://stackoverflow.com/q/16895960/170243 – Joe

0

Так что я получил ответ на это по электронной почте (может быть полезно другие люди ...)

Ваше исключение означает, что ваша теория пролога не написана так, как есть ожидается в 2Prolog. Чтобы проверить ваш пролог, вы можете запустить 2p.jar ... он открывает графический интерфейс, который сообщает вам, где ошибка. Из java вы не можете понять, что происходит. Возможно ли, что вы хотите написать что-то вроде: s: -np, vp? Я никогда не использовал нотацию -> в 2Prolog, я не думаю, что это возможно.

 Смежные вопросы

  • Нет связанных вопросов^_^