Prolog: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m link verso la voce relativa alla Risoluzione
 
(45 versioni intermedie di 25 utenti non mostrate)
Riga 1:
{{tmp|linguaggioLinguaggio di programmazione}}
|nome = Prolog
|immagine = <!-- Solo nome file -->
|didascalia =
|autore = [[Alain Colmerauer]]
|data = [[1972]]
|versione =
|utilizzo = linguaggio general-purpose
|paradigmi = [[Programmazione logica]]
|tipizzazione = non esistono tipi di dati
|specifiche = ISO/IEC 13211-1 (1995)
|estensione = .pl .pro .P
|influenzato_da = <!-- Lista di linguaggi che hanno influenzato il linguaggio in esame, citare le fonti -->
|ha_influenzato = <!-- Lista di linguaggi influenzati dal linguaggio in esame, citare le fonti -->
|implementazione_riferimento = <!-- Implementazione di riferimento: compilatore o interprete? -->
|sistema_operativo = <!-- S.O. supportati dall'impl. di riferimento -->
|lingua = <!-- Lingue supportate dall'impl. di riferimento -->
|licenza = <!-- Licenza del codice sorgente o binario dell'impl. di riferimento -->
|sito_web =
}}
 
Il '''Prolog''' (contrazione del [[Lingua francese|francese]] '''''PRO'''grammation en '''LOG'''ique'') è un [[linguaggio di programmazione]] che adotta il [[paradigma di programmazione|paradigma]] di [[programmazione logica]].
 
È stato ideato da [[Robert Kowalski]] (aspetto teorico), [[Marten Van Emdem]] (dimostrazione sperimentale) ede implementato da [[Alain Colmerauer]] negli [[Anni 1970|anni settanta]], costituendoe costituisce un tentativo di costruire un linguaggio di programmazione che consentisseconsenta l'espressione del problema in forma logica, invece dellache in forma traduzione di un [[algoritmo]] di soluzione ineseguibile formadalla macchina. L'attuale implementazione di istruzioniProlog daè eseguiredovuta dain gran parte dellaall'efficiente macchinacodifica di [[David H.D. LWarren]], implementata tramite la sua 'attuale'Warren implementazioneAbstract Machine'' ([[1983]]).
di Prolog è dovuta in gran parte all'efficiente codifica di [[David H.D. Warren]], implementata tramite la sua ''Warren Abstract Machine'' ([[1983]]).
 
Il Prolog è impiegato in molti programmi di [[intelligenza artificiale]],; la sua sintassi e la semantica sono molto semplici e chiare, in quanto (lo scopo primitivoper cui venne ideato 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 [[clausola di Horn|clausole di Horn]] che sono disgiunzioni di [[letterale|letterali]] del primo ordine, quantificate universalmente, con al più un letterale positivo.
 
L'esecuzione di un [[Programma (informatica)|programma]] Prolog è comparabile alla dimostrazione di un [[teorema]] mediante la [[regola di inferenza]] detta [[Risoluzione (logica)|risoluzione]] (introdotta da [[John Alan Robinson|Robinson]] nel [[1965]]). I concetti fondamentali sono l'unificazione, la [[algoritmo ricorsivo|ricorsione]] in coda e il [[backtracking]].
 
I concetti fondamentali sono l'unificazione, la [[algoritmo ricorsivo|ricorsione]] in coda e il [[backtracking]].
Molti linguaggi, come [[Datalog]] o [[AnsProlog]], sono basati su Prolog.
 
== Sintassi ==
Nel Prolog, la logica del programma è espressa sotto forma di relazioni, e le attività di calcolo vengono attivate da un'interrogazione relativa a tali relazioni.
 
=== Tipi di dati ===
L'elemento generico del Prolog si chiama ''termine''. I termini possono essere ''costanti'' (''atomi'' o ''numeri''), ''variabili'' o ''termini composti''.
* Un '''atomo''' è un nome generico senza significato intrinseco, es.: <code>x</code>, <code>blu</code>, <code>'Taco'</code>, <code>'questo signore'</code>.
* Un '''numero''' può essere intero o decimale.
* Una '''variabile''' è indicata per mezzo di una stringa di lettere, numeri e underscore (_) che comincia con una maiuscola o un trattino basso.
* Un '''termine composto''' è formato da un atomo detto "funtore" e da uno o più argomenti - anch'essi termini - scritti tra parentesi e separati da virgole, p.es. <code>data(27,'marzo',1980)</code> <code>anno_modello_auto('Mazda','cx 5',1986)</code> e <code>'Amici'(zelda,[tom,jim])</code>.
Casi speciali di termini composti:
* Una '''lista''' è una collezione ordinata di termini, separati da virgole; viene indicata per mezzo di parentesi quadre; è ammessa la lista vuota <code>[]</code>. Esempi: <code>[1,2,3]</code> e <code>[rosso,verde,blu]</code>.
* Una '''stringa''' è una sequenza di caratteri delimitata da doppi apici ("), p.es. <code>"essere o non essere"</code>.
 
=== Regole e fatti ===
 
Una '''regola''' ha la forma:
 
<syntaxhighlight lang="prolog">
Testa :- Corpo.
</syntaxhighlight>
 
che si legge: "Testa è vera se Corpo è vero." (Si noti che la regola termina con un punto.)
 
Un singolo termine (anche composto), senza il segno <code>:-</code>, viene chiamato '''fatto'''. I fatti equivalgono a regole senza corpo, che sono considerate automaticamente vere. Un esempio di fatto è:
 
<syntaxhighlight lang="prolog">
gatto(tommaso).
</syntaxhighlight>
 
Al di là dell'uso strettamente previsto dalla teoria, il Prolog offre anche dei predicati speciali che servono per input/output e altre attività accessorie. P.es. <code>write/1</code> visualizza un termine sullo schermo.
 
== Programma di esempio ==
 
=== [[Hello world|Hello, world!]] ===
Il seguente esempio stampa il testo "[[Hello world]]".
<syntaxhighlight lang="prolog">
Line 40 ⟶ 91:
 
== Implementazioni ==
{{div col}}
 
* Amzi! Prolog
* Ciao Prolog ([http://www.clip.dia.fi.upm.es/Software/Ciao http://www.clip.dia.fi.upm.es/Software/Ciao])
* Ciao Prolog
* [[GNU Prolog]] ([http://www.gprolog.org/ http://www.gprolog.org/])
* {{cita web|http://eclipseclp.org/|ECLiPSe}}
* YAP Prolog ([http://www.ncc.up.pt/~vsc/Yap http://www.ncc.up.pt/~vsc/Yap])
* [[GNU Prolog]]
* [[SWI-Prolog]] ([http://www.swi-prolog.org http://www.swi-prolog.org])
* {{cita web|http://www.jiprolog.com|JIProlog}}
* Visual Prolog ([http://www.visual-prolog.com http://www.visual-prolog.com])
* Lpa Prolog
* SICStus Prolog ([http://www.sics.se/sicstus/ http://www.sics.se/sicstus/])
* Prolog.NET
* Strawberry Prolog ([http://www.dobrev.com/ http://www.dobrev.com])
* SICStus Prolog
* Amzi! Prolog ([http://www.amzi.com/ http://www.amzi.com/])
* Strawberry Prolog
* [http://waitaki.otago.ac.nz/~michael/wp/ Interprete prolog che gira su un browser]
* [[SWI-Prolog]]
* Lpa Prolog ([http://www.lpa.co.uk http://www.lpa.co.uk])
* [https://web.archive.org/web/20190317003033/http://apice.unibo.it/xwiki/bin/view/Tuprolog/WebHome tuProlog]
* tuProlog ([http://tuprolog.alice.unibo.it/ tuprolog.alice.unibo.it])
* [[Visual Prolog]] (ex Turbo Prolog)
* Prolog.NET ([http://prolog.hodroj.net/ prolog.hodroj.net])
* [[XSB]]
* XSB ([http://xsb.sourceforge.net xsb.sourceforge.net])
* YAP Prolog
* Jekejeke Prolog ([http://www.jekejeke.ch/ www.jekejeke.ch])
{{div col end}}
 
== Bibliografia ==
*{{RivistaVG|list|8/9|28-30|9/10|1987|titolo=Le basi logiche del Prolog}}
* Patrick Blackburn, Johan Bos, Kristina Striegnitz: ''Learn Prolog Now!''[http://www.learnprolognow.org] College Publications, 2006, ISBN 1-904987-17-6
*{{cita testo|url=https://archive.org/stream/IntelligenzaArtificiale1#page/n7|titolo=Il Prolog strumento principe|rivista=Intelligenza Artificiale|numero=1|data=1988|pp=8-12|editore=Arcadia|città=Milano}}
* [http://pauillac.inria.fr/~deransar/prolog/docs.html Prolog: Lo standard ISO]
* {{en}} Patrick Blackburn, Johan Bos, Kristina Striegnitz, ''[http://www.learnprolognow.org Learn Prolog Now!] {{Webarchive|url=https://web.archive.org/web/20070826231318/http://www.learnprolognow.org/ |date=26 agosto 2007 }}'', College Publications, 2006, ISBN 1-904987-17-6
* J. A. Robinson, A Machine-Oriented Logic Based on the Resolution Principle. Journal of the Association for Computing Machinery, 12(1), January 1965.
* {{en}} J. A. Robinson, ''A Machine-Oriented Logic Based on the Resolution Principle'', in ''Journal of the Association for Computing Machinery'', 12(1), gennaio 1965.
 
== Voci correlate ==
* [[Mercury (linguaggio)]]
* [[Programmazione logica]]
 
== Altri progetti ==
Line 65 ⟶ 122:
 
== Collegamenti esterni ==
* [{{cita web|http://wwwpauillac.inria.fr/~deransar/prolog/docs.info html|Prolog.info]: NotizieThe eISO risorsestandard sul Prolog e AI.documents|lingua=en}}
* {{en}} [http://www.prolog.info Prolog.info] Notizie e risorse sul Prolog e AI.
 
== Voci correlate ==
* [[Mercury (linguaggio)]]
* [[Programmazione logica]]
 
{{Principali linguaggi di programmazione}}
{{Controllo di autorità}}
{{portale|informatica}}
[[Categoria:Linguaggi di programmazione]]
[[Categoria:Intelligenza artificiale]]
 
[[Categoria:Linguaggi di programmazione logica]]
{{Link VdQ|de}}
{{Link FA|nl}}