Prolog
Da Wikipedia, l'enciclopedia libera.
Il Prolog (PROgramming in LOGic) è un linguaggio di programmazione che adotta il paradigma logico.
È stato ideato da Robert Kowalski (aspetto teorico), Marten Van Emdem (dimostrazione sperimentale), ed implementato da Alain Colmerauer negli anni 70, costituendo un tentativo di costruire un linguaggio di programmazione che consentisse l'espressione del problema in forma logica invece della traduzione di un algoritmo di soluzione in forma di istruzioni da eseguire da parte della macchina. L'attuale implementazione di Prolog è dovuta in gran parte all'efficiente codifica di David H.D. Warren.
Il Prolog è impiegato in molti programmi di Intelligenza artificiale, la sua sintassi e la semantica sono molto semplici e chiare (lo scopo primitivo era quello di fornire uno strumento di lavoro a linguisti privi di conoscenze informatiche).
Il Prolog si basa sul calcolo dei predicati (precisamente il calcolo di predicati del primo ordine); tuttavia la sintassi è limitata a formule dette clausole di Horn che sono disgiunzioni di letterali del primo ordine quantificate universalmente con al più un letterale positivo.
L'esecuzione di un programma Prolog è comparabile alla dimostrazione di un teorema mediante la regola di inferenza detta risoluzione (introdotta da Robinson nel 1965). I concetti fondamentali sono l'unificazione, la ricorsione in coda e il backtracking.
Indice |
[modifica] Programma di esempio
[modifica] Hello, world!
Il seguente esempio stampa il testo "Hello world".
?- write('Hello World'), nl.
[modifica] Permutazioni
La potenza di Prolog non risiede comunque nella sua gestione dell'input/output, quanto nella possibilità di rappresentare semplicemente concetti complessi, ad esempio algoritmi combinatori. Ecco un programma che calcola tutti le possibili permutazioni di una parola data come lista di caratteri:
permutation([],[]). permutation(Xs,[Z|Zs]) :- select(Z,Xs,Ys), permutation(Ys,Zs). select(X,[X|Xs],Xs). select(Y,[X|Xs],[X|Ys]) :- select(Y,Xs,Ys).
[modifica] Meta-Interpretazione
In Prolog è semplice scrivere interpreti e compilatori. Ad esempio, un meta-interprete di Prolog (cioè un interprete Prolog scritto in Prolog) è costituito da solo 3 linee di codice:
vanilla(true). vanilla((A,B)):- vanilla(A), vanilla(B). vanilla(X):- clause(X,B), vanilla(B).
[modifica] Implementazioni
- Ciao Prolog (http://www.clip.dia.fi.upm.es/Software/Ciao)
- GNU Prolog (http://gnu-prolog.inria.fr)
- YAP Prolog (http://www.ncc.up.pt/~vsc/Yap)
- SWI Prolog (http://www.swi-prolog.org)
- Visual Prolog (http://www.visual-prolog.com)
- SICStus Prolog (http://www.sics.se/sicstus/)
- Amzi! Prolog (http://www.amzi.com/)
- Interprete prolog che gira su un browser
- Lpa Prolog (http://www.lpa.co.uk)
- ECLiPSe (eclipse.crosscoreop.com)
- tuProlog (tuprolog.alice.unibo.it)
[modifica] Riferimenti
- Prolog: Lo standard ISO
- J. A. Robinson, A Machine-Oriented Logic Based on the Resolution Principle. Journal of the Association for Computing Machinery, 12(1), January 1965.
[modifica] Voci correlate
Principali linguaggi di programmazione (tutti) |
Ada | ALGOL | APL | Awk | BASIC | C | C++ | C# | COBOL | Delphi | Eiffel | Fortran | Haskell | IDL | Java | JavaScript | J# | Lisp | LOGO | ML | Objective C | O'Caml | Pascal | Perl | PHP | PL/I | PLaSM | Prolog | Python | Ruby | SAS | Scheme | sh | Simula | Smalltalk | SQL | Visual Basic |