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.