Programarea logică este direcția programării moderne, care a început inițial în sfera lucrărilor asupra intelectului artificial și sa dezvoltat în a doua jumătate a anilor optzeci, grație proiectului japonez de calculator din a cincea generație. Cea mai completă expresie a ideii de programare logică este în limba Prolog (programarea în LOGic - programare în termeni de logică). Versiunea originală a limbajului Prolog a fost dezvoltată sub îndrumarea lui Alain Colmerauer de la Universitatea din Marsilia în 1972. În prezent există diferite versiuni pentru DOS (PDC Prolog, Arity Prolog etc.), Windows (Prolog Prolog, Strawberry Prolog, Trinc Prolog etc.), Linux (Arity Prolog, Visual Prolog etc.).
Baza teoretică a lui Prolog este secțiunea logicii simbolice numită calculul predicatelor. Prolog are o serie de proprietăți pe care unele limbi de programare tradiționale nu le posedă, ceea ce îl face un instrument puternic în domeniul programării logice. Astfel de proprietăți includ mecanismul de ieșire cu căutare și întoarcere, mecanismul integrat de co-livrare cu un eșantion și o simplă, dar de înaltă rezoluție, structura de date cu posibilitatea de ao schimba. În Prolog, nu există nici un punct-la-t-li, operatorii de -vovation și GOTO. Pro-gram-mi-ro-vanya este re-kur-siya.
Programul pe Prolog este o colecție de declarații. Aprobările constau în obiective. La sfarsitul declaratiei punctul "" este pus. Uneori ut-ver-zhenie se numește o propoziție.
Funcționarea de bază a Prolog este dovada obiectivelor incluse în declarație.
Există două tipuri de declarații:
- fapt este un singur obiectiv, care, desigur, este adevărat;
- Regula se compune dintr-o țintă centrală și una sau mai multe ținte de coadă care sunt adevărate în anumite condiții.
De regulă, regulile au mai multe ținte de coadă sub forma unei combinații de obiective.
Conjuncția poate fi considerată ca o funcție logică a lui I. Astfel, regulile sunt convenite dacă sunt convenite toate obiectivele coada.
Să alegem pentru implementarea sistemului Visual Prolog (www.visual-prolog.com).
Rezolvăm problema relațiilor înrudite, deoarece Prolog este bine adaptat pentru procesarea informațiilor non-numerice.
Faptul că Tom este părintele lui Bob poate fi scris pe Prolog ca acesta:
Aici am selectat părintele ca nume de relație, tom și fasole - ca argumente pentru această relație. Noi scriem nume ca Tom. începând cu o literă mică. Toate relațiile legate de arbore (rețeaua semantică)
este descrisă în următorul program Visual Prolog:
Pentru programare, trebuie
1. Porniți sistemul Visual Prolog.
Fig. 12.1. Fereastra Visual Prolog 5.0
2. Introduceți programul Fișier ® Nou.
3. Testați obiectivul obiectivului de testare Project ®.
La întrebarea întrebată: "Este Bob părintele lui Pat?" - sistemul va răspunde da, după ce a găsit un astfel de fapt în program.
O altă întrebare: "Cine este părintele Liz?"
Întrebarea "Cine sunt copiii lui Bob?" Poate fi dată în această formă:
Programul poate, de asemenea, să pună mai multe întrebări generale: "Cine este al cărui părinte?" Să o formulăm astfel:
Găsiți X și Y astfel încât X este părintele lui Y.
Pe Prolog, este scris astfel:
Sistemul va găsi, la rândul său, toate perechile tipului părinte-copil.
Definiți regulile: o femeie, un bărbat, un părinte, părinții, bunicul, bunica.
Definiți regula unei femei, bazată numai pe lumea descrisă.
În mod similar, regula este un om.
Obiectivele pot fi stabilite prin următoarele.
Vom rezolva problema relațiilor de familie ale familiei Romanov și vom găsi copiii lui Alexei Mikhailovici.
Vom găsi toate reginele cu ajutorul unei întrebări compuse.
Adăugăm mai multe reguli: frate, how_reign.
Regula de determinare a unui frate poate fi citită după cum urmează:
Pentru orice X și Y, X este fratele lui Y, dacă
- X și Y au un părinte comun, și
- X este un om, și
- X nu este propriul său frate.
În procesul de realizare a obiectivului, Prolog scanează automat opțiunile, făcând o revenire dacă oricare dintre ele nu reușește. Uneori este necesar să le limităm sau să excludem cu totul.
Pentru a face acest lucru, în Prolog, există un scop restrictiv de căutare "tăiere" (!), Care este necondiționat adevărat.
Vom găsi un singur fiu al lui Alexei Mikhailovici
Descriim un predicat care determină maximul a două numere întregi.
Aceste reguli se exclud reciproc. Dacă primul este mulțumit, al doilea va eșua. Puteți să o modificați prin tăierea regulii.
Prologul conține un predicat standard, completarea cărora întotdeauna eșuează - eșuează. Eșecul prezice procesul de backtracking, adică căutarea unor noi soluții sau re-evidențierea obiectivelor. Să arătăm un exemplu.
Pentru a implementa negarea, nu folosiți predicatul. Particularitatea utilizării sale este că tot efemerul transferat trebuie asociat, adică concret. De exemplu, răspunsul la întrebarea: "Leonard nu este părintele Jason?".
nu vor fi percepute de sistem. Puteți reda obiectivul: "Cine din sistemul cunoscut al părinților nu este tatăl lui Jason?".
Astfel, nu se poate obține cunoașterea din ignoranță, iar predicatul nu este folosit doar pentru scopuri de verificare.
În programele de mai sus pe Visual Prolog, puteți selecta și completa: