Predicate aritmetica şi relaţionale. Intrări/Ieşiri.
Operatori aritmetici: +,-,*,/,div,mod
o O expresie aritmetică e calculabilă, dacă toate variabilele ce se conţin în ea sunt legate.
Funcţii în prolog: round(X), trunc(X), abs(X), cos(X), sin(X), tan(X), arctan(X), exp(X), ln(X), log(X), sqrt(X), random(X)(0..1 - real), random(N,X)(0..(N-1) - intregi).
Operatori relaţionali: <, <=, =, >=, >, <>.
Input:
readln(String) % Citeşte o linie de text, terminată cu Enter.
Output:
argi - constante sau variabile legate.
Ex: inc(X,Y):- readint(X),Y=X+1.
Goal: inc(3,4) -> Yes
Goal: inc(X,Y)
-> 7 %se introduce
-> X=7,Y=8
-> 1 Solution
Tipuri de propoziţii în Prolog
Programele prolog reprezintă o bază de cunoştinţe formată dintr-un şir de propoziţii. Fiecare propoziţie se termină cu semnul ‘.’. Toate propoziţiile sunt clause sau formule în forma clauzală.
O clauză are forma generală: Q:-T1,T2,…,Tn, unde
- Q - capul clauzei;
- T1,T2,…,Tn - coprul clauzei;
- ‘ :- ‘ - operaţia IF;
- ‘ , ‘ - operaţia AND.
Există 3 tipuri de clauze
1) Dacă Q ≠ vid şi T1,T2,…,Tn ≠ vid atunci este o afirmaţie condiţionată(regulă).
2) Dacă Q != vid şi T1,T2,…,Tn = vid, atunci clauza este fapt.
3) Dacă Q = vid şi T1,T2,…,Tn != vid, atunci clauza este o interogare(întrebare).
Fapte.
Fapt - adevăr necondiţionat.
Forma generală: nume_predicat(arg1,arg2,…,argn). , unde nume_predicat şi argi - constante(atomi).
Ex:
plus(3,4,7).
om(ion).
ruta(paris,roma).
ploua.
Regula.
Regula - afirmaţie care depinde de careva condiţii.
Forma generală:
nume_predicat(arg1,arg2,…,argn):-
predicat1(arg11,arg12,…,arg1N),
predicat2(arg21,arg22,…,arg1K),
…,
predicatM(argM1,argM2,…,argML).
Ex: om(socrate). %fapt
muritor(X):-om(X). % regulă
Regulile pot avea mai multe variante.
Ex: intunecat(X):- negru(X).
intunecat(X):- brun(X).
Interogările.
Interogare - întrebări asupra bazei de cunoştinţe(scopuri).
Scopurile pot fi interioare sau exterioare.
Scopurile interioare - deterministe;
Scopurile exterioare - nondeterministe.
Ex: carte(goian,algebra,1990).
carte(efros,geometrie,1996).
carte(goian,matemaatica,1993).
carte(efros,matematica,1997).
carte(goian,structuri,1997).
newBook(X):- carte(_,X,An),An>1995.
raspindita(X):- carte(Z,X,_),carte(Y,X,_),Z<>Y.
—
Goal carte(X,_,_). %GRESIT!!!!
Goal carte(X,_,_),write(X). %CORRECT.
—
Raspuns: goian
—
Goal: carte(goian,algebra,1990) -> Yes. %Exista asa fapt???
%% interogari cu variabile:
Goal: carte(goian,_,1993) -> Yes %A scris goian vreo carte in 1993?
Goal: carte(goian,X,_),carte(efros,X,_)
è X=matematica
è 1 Solution
%% au scris goian si efros carti cu aceeasi denumire???
Goal: carte(goian,X,_),newBook(X).
è X=structuri
è 1 Solution
Goal: carte(goian,matematica,_);carte(efros,matematica,_). -> Yes
Termeni în limbajul Prolog. Unificarea termenilor
Tipurile de date simple:
- Char - orice caracter în ghilimele unare. ‘A’, ‘b’, ‘1′, ‘+’.
- Symbol - şir de litere, cifre şi semnul _, primul caracter fiind o literă mică.
-
- Ex. A, aB, z_1, predicat.
- Ex. A, aB, z_1, predicat.
- String - orice şir de caractere ăn ghilimele duble
- Integer - întreg între -32768..32767
- Real - numere reale între 1.0E-307..1.0E+308.
Definiţie: Termen în limbajul Prolog reprezintă un cuvânt generic, care desemnează toate tipurile de date.
Termenii pot fi clasificaţi conform următoarei ierarhii:
- Simpli
o Constante
§ Atomi
§ numere
o variabile
- structuraţi
Definiţie: Variabila este un identificator format din litere, cifre şi _, primul caracter fiin o literă mare sau ‘_’. Variabilele nu se declară. Domeniul de vizibilitate a variabilei este propoziţia în care se conţine.
Definiţie: Atomul este un obiect de tipul symbol (fără string).
Definiţie: Orice nume de predicat reprezintă un atom.
Ex: ruta(paris,roma). % ruta, paris şi roma sunt atomi.
Definiţie: Termenul structurat este un obiect în care sunt regrupate alte obiecte, numite componente. Un termen structurat se defineşte prin functorul(atom) său, componentele sale şi aritatea (numărul de componente).
Ex: autor(ion, goian) % autor - functor, ion, goian - componente
carte(algebra, autor(ion, goian))
Termenii structuraţi pot fi reprezentaţi cu ajutorul arborelor, în care nodurile neterminale reprezintă functori, iar succesorii săi - componentele.
Ex: Carte
- Algebra
- Autor
o Ion
o Goian
Unificarea
‘=‘ (predicat)
Forma generală: termen1 = termen2
Rezultatul operaţiei este True sau False. Doi termeni pot sau nu să se unifice.
Efectele unificării:
- compararea la egalitate;
- legarea unei variabile cu o valoare(atribuire);
- legarea între ele a două variabile neinstanţiate(libere).
Reguli de unificare a doi termeni
- Dacă termen1 şi termen2 sunt constante sau variabile instanţiate, atunci ei se unifică numai dacă reprezintă acelaşi obiect(sunt egale - compararea).
- Dacă termen1 - variabilă neinstanţiată şi termen2 - constantă, sau invers, atunci termenii se unifică şi termenul neinstanţiat se leagă de cealaltă valoare(operaţie de atribuire).
- Dacă termen1 şi termen2 sunt termeni structuraţi, atunci ei se unifică dacă functorul lor coincide, au acelaşi număr de argumente şi se unifică intre ele argumentele de pe poziţiile corespunzătoare.
- Dacă termen1 şi termen2 sunt variabile neinstanţiate, atunci termenii se unifică dacă tipurile lor coincid. În acest caz se stabileşte o legătură dintre aceşti termeni şi în continuare dacă un termen se leagă cu o valoare, al doilea termen se leagă cu aceeaşi valoare.
Exemple de unificări:
|
Propoziţii |
Unificare |
|
|
Ion |
ana |
Yes |
|
X |
1 |
Yes |
|
_ |
“sir de caractere” |
Yes |
|
autor(ion,_) |
autor(X,goian) |
Yes |
|
ion |
ana |
No |
|
Ion |
Ana |
Yes |
|
_1 |
1_ |
No(error) |
|
Abc |
ABC |
Yes |
Principiile programării logice
Destinaţia limbajelor declarative:
- Elaborarea sistemelor de inteligenţă artificială(IA) sau a componentelor logice ale lor.
- Demonstrarea automată a teoremelor.
- Procesarea informaţiei simbolice - caracteristică al IA.
- Procesarea limbajului natural.
- Automatizarea raţionamentului logic.
Principiile de bază ale programării logice :
- Programarea declarativă - soluţionarea problemei canstă în specificarea(formularea) problemei şi descrierea regulilor generale de soluţionare, iar căutarea soluţiei revine sistemului de programare relative.
- Descrierile sunt programe - nu există deosebire dintre date şi program.
- Conceptul de inferenţă - noţiunea de calcul se înlocuieşte cu noţiunea de deducere.
- Principiul lumii închise - tot ce nu este cunoscut este fals.
- Nondeterminismul - Proces de reprezentare al multiplelor solutii. Printr-un mecanism special numit backtracking pot fi obţinute o consecutivitate de soluţii alternative.
- Reversibilitatea relaţiilor - în diferite chemări argumentele unui predicat pot să fie şi de intrare şi de ieşire.
- Multiple reprezentări - Un program logic poate fi interpretat ca o bază de cunoştinţe(declarativ) cît şi ca o procedură(procedurală).
- Recursia - o metodă fundamentală în lipsa unor bucle de tipul For sau While
Definiţie. Limbajul PROLOG este o automatizare al logicii predicatelor de ordinal I.
Elementele de bază al limbajului PROLOG îl reprezintă predicatele.
Predicatele - funcţii logice de la careva argumente, care exprimă careva relaţii dintre argumente. Ordinea argumentelor trebuie să fie fixată strict.
Exemple.
ruta(paris,roma) - există o rută din paris la roma, nu şi invers
părinte(ana,ion) - ana este părintele lui ion.
Definiţia. Executarea unui program PROLOG constă în demonstrarea unei teoreme reprezentată de întrebarea(interogarea) pusă asupra programului.
Principala metodă de demonstrarea în limbajul PROLOG este principiul rezoluţiei care se bazează pe teorema.
Teoremă. Formula A este consecinţă logică al formulelor P1,P2;…,Pn atunci şi numai atunci, cînd formula P1&P2, … &Pn&Ẵ(non A) este irealizabilă(falsă).
BackUp Loss
Cu părere de rău, hostingul la care a fost blogul nostru până acum ne-a şters contul şi domenul, fără a ne preveni. Astfel am pierdut toată baza de date şi toate articolele postate până acum.
Noi sperăm să găsim un hosting bun şi ieftin(sau chiar gratis). Dar până atunci suntem aici şi ne străduim să oferim toată informaţia necesară.