RSS
English French German Spanish  

Mini guida Prolog – Parte X: usare Prolog da Java (1)

,

Aprile 26, 2012

Linguaggi di Programmazione

Print Friendly
Share
Prolog - from Java (1)

Uno degli aspetti più interessanti di tuProlog è l’interoperabilità con l’ambiente Java. Si tratta, come vedremo approfonditamente in questa seconda parte della guida, di una interoperabilità bidirezionale, essendo possibili sia l’utilizzo dell’interprete Prolog all’interno di un programma Java sia l’utilizzo di componenti Java all’interno di un procedimento di dimostrazione Prolog. Nel primo caso si arricchisce l’ambiente imperativo Java abilitandolo all’impiego di tecniche di programmazione logica, mentre nel secondo caso si aprono all’interprete Prolog le porte alle innumerevoli tecnologie disponibili in Java per l’integrazione e l’interazione con l’esterno e con l’utente (JDBC per il database, CORBA o Web Services per gli ambienti distribuiti e AWT/Swing per la GUI per citare i fondamentali).

All’inizio del corso si è mostrato come sia possibile lanciare la GUI di tuProlog dalla shell del sistema operativo con il comando:

java -jar <path>/lib/2p.jar

dove con <path> si è indicato il percorso nel quale è stato scompatto il file 2p-X.Y.Z.zip contenente la distribuzione di tuProlog. Ora utilizzeremo invece lo stesso file 2p.jar come libreria all’interno di una applicazione Java, in modo che la teoria e l’interprete Prolog siano visibili come oggetti (di classe rispettivamente alice.tuprolog.Theory e alice.tuprolog.Prolog) a seguito di un import del tipo:

import alice.tuprolog.Prolog;
import alice.tuprolog.SolveInfo;
import alice.tuprolog.Term;
import alice.tuprolog.Theory;

Il costruttore della classe Theory permette la costruzione di una teoria a partire da un file di testo esterno oppure da una stringa, come nel seguente caso:

String theory_text =
    “cane(fido).\n” +
    “gatto(silvestro).\n” +
    “canarino(titti).\n” +
    “animale(X) :- cane(X); gatto(X); canarino(X).\n”;
 
Theory theory = new Theory(theory_text);

Possiamo quindi istanziare un interprete Prolog, richiedere la valutazione di un goal e stampare i relativi risultati con le seguenti istruzioni:

engine.setTheory(theory);
 
SolveInfo info = engine.solve(
    “animale(X).”
);
while(info.isSuccess()) {
    Term solution = info.getSolution();
    System.out.println(“Solution: ” + solution);
    System.out.println(“Bindings: ” + info);
    if(engine.hasOpenAlternatives())
        info = engine.solveNext();
    else
        break;
}

Ritorna alla Home

Nessun commento finora.

Invia una Risposta