next up previous Sommario
Next: Bibliography Up: tesi Previous: 9. Codice del progetto   Sommario

10. Conclusioni

In questa tesi è stata studiata una tecnica per la negazione in programmazione logica che integra le tecniche di negazione intensionale e di negazione costruttiva di Chan.

Grazie ad un'analisi delle proprietà di terminazione del programma da complementare, la tecnica individua i predicati da trattare con la negazione intensionale e quelli invece per i quali nel complementare comparirà una sola clausola che rimanda a tempo di esecuzione il calcolo della negazione, usando la risoluzione SLDCNF.

Questa soluzione porta ad un minor costo in spazio dell'operazione di complementazione, al costo di un analisi a tempo di compilazione del programma. I vantaggi di tale metodo si notano soprattutto quando si ha a che fare con basi di dati deduttive, caratterizzate da un elevato numero di costanti nel linguaggio che portano ad un gran numero di clausole nel complementare calcolato secondo la negazione intensionale.

Naturalmente la tecnica si presta all'adozione di altri metodi di analisi di terminazione: quello proposto in questa tesi cerca di combinare la capacità di individuare i casi critici per la negazione intensionale con la possibilità di trattare letterali negativi e, non ultima, l'eventualità di porre limiti alla profondità dell'analisi.



La fase di realizzazione con il linguaggio Gödel ha messo in evidenza alcuni aspetti importanti dell'utilizzo della rappresentazione ground di programmi logici.

Innanzitutto, il concetto di modulo in Gödel non si presta perfettamente per rappresentare i programmi logici a cui applicare gli operatori. L'aspetto che gli autori di Gödel hanno voluto privilegiare è la possibilità di compilare separatamente i moduli senza problemi di ambiguità sui nomi. Quando si trattano i metaoperatori visti si vuole invece che nomi uguali in programmi diversi corrispondano; ciò crea la necessità di una implementazione diversa, che porti ad un'efficienza maggiore di quella ora ottenuta, compromessa in parte dalla necessità di dover rappresentare come stringhe ogni oggetto da esportare da un modulo all'altro. In tal modo sarà anche possibile implementare gli operatori di Unione ed Intersezione secondo lo schema metainterpretativo di vanilla.

Interessante inoltre è stato lavorare con i predicati per la manipolazione di programmi in rappresentazione ground offerti dal Gödel: lo stile dichiarativo della programmazione logica viene rispettato anche nello scrivere metaprogrammi.


next up previous Sommario
Next: Bibliography Up: tesi Previous: 9. Codice del progetto   Sommario
Roberto Giungato 2001-03-14