Prolog | |
---|---|
Clasa de limba | Programare logica |
Aparut in | 1972 |
Autor | Alain Colmeroe |
Extensie de fișier | .pl, .prosau.P |
Implementări majore | B-Prolog , Ciao , ECLiPSe , GNU Prolog , Logic Programming Associates , Poplog Prolog, P# , Quintus, SICStus , Strawberry , SWI- Prolog , tuProlog , XSB , YAP-Prolog |
Dialectele | ISO Prolog, Edinburgh Prolog, Turbo Prolog, Visual Prolog |
A fost influențat | planificator |
influențat | Visual Prolog , Mercur , Oz , Erlang , Strand , KL0 , KL1 , Datalog |
Prolog ( eng. Prolog ) este un limbaj de programare logic și un sistem bazat pe limbajul predicat al logicii matematice a clauzelor lui Horn , care este un subset al logicii predicatelor de ordinul întâi .
Limbajul este centrat pe un set mic de mecanisme de bază, inclusiv potrivirea modelelor , reprezentarea în arbore a structurilor de date și backtracking automat. Potrivit pentru rezolvarea problemelor în care sunt luate în considerare obiectele (în special obiectele structurate) și relațiile dintre ele. Prolog, datorită particularităților sale, este utilizat în domeniul inteligenței artificiale, al lingvisticii computaționale și al programării non-numerice în general. În unele cazuri, implementarea calculelor simbolice în alte limbi standard face necesară crearea unei cantități mari de cod greu de înțeles, în timp ce implementarea acelorași algoritmi în Prolog oferă un program simplu care se potrivește ușor pe o singură pagină. .
Prolog este un limbaj de programare declarativ : logica unui program este exprimată în termeni de relații reprezentate ca fapte și reguli. Pentru initierea calculelor se face o solicitare speciala catre baza de cunostinte , la care sistemul de programare logica genereaza raspunsuri adevarate si false. Pentru interogări generalizate cu variabile ca argumente, sistemul creat Prolog produce date specifice pentru a confirma adevărul informațiilor generalizate și a regulilor de inferență.
Cu alte cuvinte, un predicat poate fi definit ca o funcție care mapează un set de natură arbitrară într-un set de valori booleene {ложно, истинно} . Sarcina programului prolog este de a dovedi dacă o anumită declarație de scop este o consecință a faptelor și regulilor date.
Începutul istoriei limbii datează din anii 1970. [1] Fiind un limbaj de programare declarativ , Prolog percepe ca program o descriere a unei sarcini sau baze de cunoștințe și produce el însuși o concluzie logică, precum și o căutare a unei soluții la probleme, folosind mecanismul de căutare cu backtracking și unificare .
Interesul pentru Prolog a crescut și a scăzut de câteva ori, entuziasmul a fost înlocuit cu o respingere puternică. Interesul pentru Prolog ca limbaj al viitorului a fost ridicat la cel mai înalt nivel în timpul dezvoltării programului de calculator național de generația a cincea din Japonia în anii 1980, când dezvoltatorii sperau că cu Prolog va fi posibil să se formuleze noi principii care să conducă la un nivel mai ridicat. calculatoare.nivel de inteligenţă.
Limbajul Prolog în anii 1980 a fost inclus într-o serie de manuale universitare și școlare sovietice despre informatică pentru a studia elementele logicii matematice, principiile programării logice și proiectarea bazelor de cunoștințe și a modelelor de sisteme expert . În acest scop, interpreții educaționali în limba rusă ai Prolog au fost implementați pe computerul IBM și pe o serie de calculatoare școlare sovietice.
În Prolog, faptele sunt descrise sub formă de predicate logice cu valori concrete. Regulile de inferență sunt descrise de predicate logice cu definiția regulilor de inferență logică sub forma unei liste de predicate asupra bazelor de cunoștințe și a procedurilor de procesare a informațiilor.
În prezent, Prolog, în ciuda previziunilor pesimiste repetate, continuă să se dezvolte în diferite țări și încorporează noi tehnologii și concepte, precum și paradigme imperative de programare . În special, una dintre domeniile dezvoltării limbajului (inclusiv în Rusia ) implementează conceptul de agenți inteligenți .
Prolog a fost implementat pentru aproape toate sistemele de operare (OS) și platformele cunoscute (inclusiv Java și .NET ). Sistemele de operare includ: mainframe OS , întreaga familie Unix , Windows , OS pentru platforme mobile.
Multe implementări moderne ale limbajului au o extensie internă datorită arhitecturii OOP . Pe lângă soluțiile non -free , există și implementări gratuite ale Prolog. În 1996, a fost adoptat standardul ISO , numit ISO / IEC JTC1 / SC22 / WG17.
Principiul de bază al limbajului este echivalența reprezentării programului și a datelor (declarativitatea), motiv pentru care declarațiile de limbaj sunt atât înregistrări, similare înregistrărilor dintr-o bază de date, cât și reguli care poartă modalitățile de prelucrare a acestora. Combinația acestor calități duce la faptul că pe măsură ce sistemul Prolog funcționează, cunoștințele (atât date, cât și reguli) se acumulează. Prin urmare, sistemele Prolog sunt considerate un mediu natural pentru acumularea unei baze de cunoștințe și predarea elevilor și școlarilor principiile programării logice.
Conceptele de bază din limbajul Prolog sunt fapte, reguli de inferență și interogări care vă permit să descrieți bazele de cunoștințe , procedurile de inferență și luarea deciziilor. Programarea logică, așa cum este implementată în Prologue, utilizează o singură regulă de inferență, rezoluția .
În Prolog, setul inițial de formule pentru care se caută o soluție goală este reprezentat sub forma așa-numitelor „ clauze Horn ”:
Un program Prolog descrie relații definite prin clauze. Ca în orice alt limbaj de calcul simbolic , propozițiile sunt construite din termeni, care la rândul lor sunt subdivizați în atomi, numere, variabile și structuri. Un atom este scris cu o literă mică sau cuprins între ghilimele atunci când este necesară o literă mare.
atom „Atom”Variabilele cu majuscule sunt diferite de variabilele din limbajele de programare procedurale, nu sunt asociate cu o locație de memorie specifică, ci mai degrabă mai aproape de o variabilă matematică.
X este 2 + 2.Structurile sunt colecții de termeni încadrați între paranteze, inclusiv alte structuri. O structură este desemnată printr-un nume (functor) care apare înaintea parantezei.
carte ( 'Titlu' , '2009' , 'Spb' , autori ( 'Primul autor' , 'Al doilea autor' ) ).Listele sunt un alt construct, ale cărui elemente sunt cuprinse între paranteze drepte. Listele din Prolog se bazează pe liste legate .
Lista = [ a , b , [ c , d ], e ].Regulile din Prolog sunt scrise sub forma unor reguli de inferență cu concluzii logice și o listă de condiții logice. În Prolog pur, propozițiile sunt limitate la clauze Horn :
Concluzie : - Stare .și se citesc astfel: „Titul este ADEVĂRAT dacă corpul este ADEVĂRAT”. Corpul regulii conține referințe la predicate, care sunt numite ținte ale regulii.
Predicate încorporate ,/2 Semnificație: un operator cu două argumente. Definește o conjuncție de obiective. ;/2 Operatorul definește disjuncția.Faptele din Prolog sunt descrise prin predicate logice cu valori concrete. Faptele din bazele de cunoștințe Prolog reprezintă informații specifice (cunoștințe). Informațiile și cunoștințele generalizate în limbajul Prolog sunt definite de reguli de inferență logică (definiții) și seturi de astfel de reguli de inferență (definiții) asupra faptelor specifice și a informațiilor generalizate. Propozițiile cu un corp gol se numesc fapte . Exemplu real:
Pisica ( Ivan ).Acest fapt este echivalent cu regula:
Pisica ( Ivan ) : - ADEVĂRAT .Prolog este criticat, în primul rând, pentru natura sa declarativă incompletă: este aproape imposibil să se creeze programe Prolog complexe și utile practic într-un stil complet declarativ, programatorul este obligat să recurgă la tehnici procedurale, ceea ce duce la o creștere bruscă a complexitatea creării și depanării programelor, precum și controlabilitatea slabă a rezultatelor intermediare. [2]
O altă proprietate adesea criticată a limbajului este lipsa tastării (în timp ce Visual Prolog [3] - una dintre extensiile orientate pe obiecte ale limbajului - implementează tastarea puternică, care, totuși, reduce flexibilitatea lui Prolog).
Limbajul predetermina ordinea de parcurgere a arborelui de decizie „în profunzime” și standardizează operatorii care vă permit să interveniți în acest proces (cum ar fi operatorul de tăiere !sau de ramificare ->). Această arhitectură face dificilă paralelizarea automată a programelor, ceea ce ar permite utilizarea mai multor procesoare sau noduri de rețea în căutarea unei soluții.
Ieșire: (Jake, Tim) (Tim, Jake)
Concluzii: 1. Timotei este mai în vârstă decât Ivan 2. Vasili este mai în vârstă decât Petru 3. Ivan este cel mai tânăr; Vasily este cel mai bătrân; Timotei este mai în vârstă decât Petru.
Limbaje de programare | |
---|---|
|
ISO | Standardele|
---|---|
| |
de la 1 la 9999 |
|
10000 până la 19999 |
|
20000+ | |
Vezi și: Lista articolelor ale căror titluri încep cu „ISO” |