Interpreter.PrologInterpreter
Class Unifier

java.lang.Object
  |
  +--Interpreter.PrologInterpreter.Sexp.Utils.SexpUnifier
        |
        +--Interpreter.PrologInterpreter.Unifier

public class Unifier
extends SexpUnifier

La classe Unifier realizza un algoritmo per l'unificazione. L'algoritmo unifica 2 Sexp fornendo la lista delle sostituzioni effettuate. L'algoritmo effettua l'unificazione senza verificare l'eventuale presenza di riferimenti circolari. Se si desidera abilitare l'esecuzione dell'occur check, ovvero il controllo della presenza di riferimenti circolari, lo si può fare invocando il metodo void set_OCCUR_CHECK(boolean) con parametro true. L'abilitazione del controllo rende l'algoritmo meno efficiente (cioè meno veloce), ma consente di effettuare una corretta unificazione. Se si desidera disabilitare l'occur check si deve richiamare il metodo public static void set_OCCUR_CHECK(boolean) con parametro false.


L'utilizzo tipico prevede che venga utilizzato il metodo unify().


Field Summary
static int DIFFERS
          Identificatore per il fallimento dell'unificazione.
 boolean OCCUR_CHECK
          Consente di modificare l'opzione di occur check per l'algoritmo di l'unificazione.
static int OCCURS
          Identificatore per il fallimento dell'unificazione dovuto all'occur check.
static int UNIFY
          Identificatore per il successo dell'unificazione.
 
Constructor Summary
Unifier(SexpHashtable Substitution)
          Costruisce un nuovo Unifier.
 
Method Summary
 void backtrack(Sexp list)
          Esegue il backtracking sulla lista delle variabili list.
protected  boolean Contains(Sexp term, Sexp var)
          Controlla se lo specificato termine composto contiene la specificata variabile o un riferimento ad essa.
protected  Sexp deref(Sexp term)
          Dereferenzia una variabile seguendo la catena di riferimenti nella tabella delle sostituzioni.
 java.lang.String getError()
          Restituisce lo stato finale dopo una unificazione in formato di stringa.
 int getResult()
          Restituisce lo stato finale dopo una unificazione.
static void main(java.lang.String[] s)
          Metodo main per il debug.
protected  int unification(Sexp a, Sexp b)
          Realizza un algoritmo per l'unificazione.
 Sexp unify(Sexp a, Sexp b)
          Prova ad unificare i due termini a e b.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

OCCUR_CHECK

public boolean OCCUR_CHECK
Consente di modificare l'opzione di occur check per l'algoritmo di l'unificazione. Variabile in base alla quale si stabilisce se effettuare occur check (ciò avviene quando il suo valore è true) oppure non effettuarlo (ciò avviene quando il suo valore è false). L'occur check è il controllo della presenza di riferimenti circolari.


Di default il suo valore è true. Il suo valore può di default è false.


UNIFY

public static final int UNIFY
Identificatore per il successo dell'unificazione.
See Also:
getResult()

DIFFERS

public static final int DIFFERS
Identificatore per il fallimento dell'unificazione.
See Also:
getResult()

OCCURS

public static final int OCCURS
Identificatore per il fallimento dell'unificazione dovuto all'occur check.
See Also:
getResult()
Constructor Detail

Unifier

public Unifier(SexpHashtable Substitution)
Costruisce un nuovo Unifier.
Parameters:
Substitution - tabella delle sostituzioni che deve essere condivisa con l'EngineSexpVisitor.
Method Detail

getResult

public int getResult()
Restituisce lo stato finale dopo una unificazione.
Lo stato può essere uguale a UNIFY, DIFFERS, OCCURS.
See Also:
getError(), UNIFY, DIFFERS, OCCURS

getError

public java.lang.String getError()
Restituisce lo stato finale dopo una unificazione in formato di stringa.
See Also:
getResult()

unify

public Sexp unify(Sexp a,
                  Sexp b)
           throws InterpreterException
Prova ad unificare i due termini a e b.
Parameters:
a - primo termine.
b - secondo termine.
Returns:
restituisce la lista delle variabili che sono state aggiunte alla tabella Substitution. Se l'unificazione non ha successo viene restituito null.
Overrides:
unify in class SexpUnifier

backtrack

public void backtrack(Sexp list)
               throws InterpreterException
Esegue il backtracking sulla lista delle variabili list.
Praticamente elimina le associazioni relative a queste variabili dalla tabella Substitution.
Parameters:
list - la lista delle variabili.

unification

protected int unification(Sexp a,
                          Sexp b)
                   throws InterpreterException
Realizza un algoritmo per l'unificazione. L'algoritmo unifica 2 Sexp. L'unificazione viene eseguita verificando l'eventuale presenza di occur check se tale verifica è stata abilitata.
Parameters:
a - Sexp che deve essere unificata con la Sexp passata tramite il parametro b.
b - Sexp che deve essere unificata con la Sexp passata tramite il parametro a.
Returns:
lo stato finale.

deref

protected Sexp deref(Sexp term)
Dereferenzia una variabile seguendo la catena di riferimenti nella tabella delle sostituzioni.

Contains

protected boolean Contains(Sexp term,
                           Sexp var)
                    throws InterpreterException
Controlla se lo specificato termine composto contiene la specificata variabile o un riferimento ad essa. Il controllo serve a prevenire la presenza di riferimenti circolari.
Parameters:
term - termine composto su cui si effettua il controllo.
var - variabile su cui si effettua il controllo.
Returns:
true se il termine composto term contiene la variabile var od un riferimento ad essa.

main

public static void main(java.lang.String[] s)
Metodo main per il debug.


Codice realizzato da Francesco Geri & Marco Tamanti