Skip to main content

Design dettagliato

Di seguito verrà riportato il design dettagliato della libreria.

Term​

Il trait Term rappresenta il concetto di termine in Prolog. Costituisce l'entità fondamentale dalla quale ereditano tutti gli altri costrutti del linguaggio prolog.

A seconda della presenza o meno di variabili in un termine, il termine è un termine base o non-base.

Constant​

Una costante è un termine che racchiude un valore che può essere alfanumerico o numerico. Le costanti alfanumeriche sono dette atomi e sono rappresentate dal trait Atom, mentre le costanti numeriche sono rappresentate dal trait Numeric.

Un atomo è un caso particolare di termine composto (ha zero argomenti).

Variabili​

Una variabile può essere identificata da un nome particolare oppure essere anonima (in tal caso il suo nome è _).

Struct​

I termini composti, detti anche strutture, sono rappresentati dal trait Struct. Ogni termine è caratterizzato da un funtore, ossia un nome di predicato, e dai sui argomenti, che sono a loro volta dei termini. Il numero di argomenti di cui è costituito un termine composto determina l'arità del termine composto.

Indicator​

Un indicatore è un termine composto che descrive un predicato in termini del funtore e dell'arità del predicato. Il funtore di un indicatore è il carattere / e la sua arità 2.

Clause​

Anche le clausole, rappresentate dal trait Clause sono strutture il cui funtore è :-.

Esistono tre principali tipi di clausole:

  • Regole: clausola con una testa e un corpo. La testa di una regola è una struttura mentre il corpo è un termine.
  • Fatti: clausola con solo una testa. Anche in questo caso la testa di un fatto è una struttura. Un fatto può essere considerato una regola il cui corpo è il l'atomo true.
  • Direttive: clausola con solo un corpo. Anche in questo caso il corpo è un termine.

RecursiveStruct​

Alcuni termini composti hanno una struttura ricorsiva. Sono strutture i cui argomenti includono in maniera ricorsiva strutture con lo stesso predicato. Da una struttura è sempre possibile ottenere la lista lineare degli argomenti.

Una lista è una struttura (PrologList), con funtore ricorsivo . (Cons). Ogni lista termina con il funtore [] (Nil).

La maggior parte delle strutture ricorsive sono binarie (BinaryRecursiveStruct). È il caso di:

  • Congiunzioni di goal (Conjunction), con funtore ,;
  • Disgiunzioni di goal (Disjunction), con funtore ;;

Theory​

Una teoria è rappresentata dal trait Theory. Una teoria è una lista di clausole.

PrologProgram​

Un programma prolog (PrologProgram) comprende:

  • Una teoria dinamica
  • Una teoria statica
  • Un goal

Solver​

Un Solver, in quanto motore di risoluzione, risolve un goal o un programma prolog e restituisce le sue soluzioni. Un motore può:

  • restituire una soluzione alla volta;
  • restituire tutte le soluzioni in una lista.

Solution​

Una soluzione di un programma prolog può:

  • Essere una soluzione positiva (Yes) (il goal è una conseguenza logica della teoria).
  • Essere una soluzione negativa (No) (il goal non è una conseguenza logica della teoria).
  • Un'eccezione (Halt) (si è verificato un problema nella risoluzione del programma).

Substitution​

In caso di soluzione positiva è possibile che il motore fornisca una sostituzione. Una sostituzione mappa variabili a termini.

PrologDSL​

Il trait PrologDSL contiene i metodi e i meccanismi per poter esprimere i concetti appartenenti al mondo Prolog. Include infatti dei metodi per costruire fatti, regole, atomi e variabili ma anche liste, congiunzioni e disgiunzioni di goal.

TermConvertible​

Il trait TermConvertible fornisce un metodo per permettere a qualsiasi oggetto che lo implementa di vederlo come un termine prolog.

TermVisitor​

TermVisitor è il trait che, se implementato da un termine o da un oggetto convertibile, permette di visitare l'albero della struttura del termine.