
2bd10b2117734da29447d2788021ccba.ppt
- Количество слайдов: 32
Programare logica si functionala Prof. dr. Dorin Bocu www. dorin. bocu. ro e-mail: dorin@bocu. ro Semestrul II 2010 -2011 Epicur: Trebuie sa tinem seama de telul urmarit si de intreaga justificare a semnificatiei la care ne raportam opiniile. Altfel, totul ar fi plin de incertitudine si de confuzie 1 2008 -2009 Semestrul II – CURS III
Programarea logica: Paradigma PROLOG in rezumat Asadar, un program PROLOG se compune din DATE si INTREBARI la care programul trebuie sa raspunda. DATELE in PROLOG au una dintre formele: • FORMA I: A(c 1, c 2, …, ck)← ceea ce in PROLOG se scrie, simbolic vorbind: A(c 1, c 2, …, ck). unde A este un predicat iar c 1, c 2, …, ck sunt constante ale LPR. Simbolul Marcheaza punctul unde o anumita formula se termina. 2 2008 -2009 Semestrul II .
Programarea logica: Paradigma PROLOG in rezumat-continuare • FORMA II: A(c 1, c 2, …, ck)←B 1(b 1, b 2, …, bl), …, Bj(d 1, d 2, …, dm) sau dupa cum scriem in PROLOG: A(c 1, c 2, …, ck): -B 1(b 1, b 2, …, bl), …, Bj(d 1, d 2, …, dm). Datele de Forma I sunt faptele programului. Datele de Forma II se numesc regulile programului, exprimand relatiile dintre predicatele care apar in fapte. Regulile, care sunt considerate formule implicative ale logicii predicatelor, carora programul le aplica operatiile de unificare si rezolutie, formeaza partea procedurala a unui program PROLOG.
Programarea logica: Paradigma PROLOG in rezumat-continuare A(c 1, c 2, …, ck) se numeste capul regulii l B 1(b 1, b 2, …, bl), …, Bj(d 1, d 2, …, dm) alcatuiesc ceea ce numim coada sau corpul regulii. l Faptele si regulile unui program PROLOG alcatuiesc baza de date a acestuia. l Intr-un program PROLOG mai apar si intrebari sau scopuri, in speta, clauze HORN de forma: B 1(b 1, b 2, …, bl), …, Bj(d 1, d 2, …, dm), adica in formalism PROLOG: Goal l B 1(b 1, b 2, …, bl), …, Bj(d 1, d 2, …, dm).
Sintaxa programelor PROLOG l l l Dupa cum am spus deja, limbajul pe care il folosim in PROLOG este o submultime a limbajului LPR, imbogatit cu simboluri care raspund anumitor cerinte. Astfel ca termenii din PROLOG sunt: variabile, constante si functii peste variabile si constante. Constantele pot fi atomi, numere sau siruri de caractere speciale. Dupa cum se va vedea in continuare, obiectele de baza ale limbajului PROLOG sunt predicatele si listele.
Sintaxa programelor PROLOGcontinuare l Alfabetul PROLOG se compune din: – – Majusculele si minusculele alfabetului latin; Cifrele 0, 1, 2, 3, 4, 5, 6, 7, 8, 9; Simboluri precum: ! # $ % ^ & * ( ) _ = + < >? /. Caracterele care sunt folosite dar nu sunt afisate nemijlocit pe ecran.
Sintaxa programelor PROLOGcontinuare l Variabilele din PROLOG Sunt litere sau cuvinte care incep cu majuscule alfabetului PROLOG sau cu caracterul de subliniere _ (underscore). Exemple: X, Y, Rezultat, Tata, Mesaj, _optiune, I 1, etc. Nu sunt variabile: x, y, reazultat, optiune. PROLOG permite folosirea variabilelor anonime, indicate prin prezenta caracterului de subliniere “_”. De exemplu: citeste(Vasile, _) din PROLOG se va interpreta astfel: Vasile citeste o carte oarecare, care nu prezinta importanta in acest punct al programului. .
Sintaxa programelor PROLOGcontinuare l l Constantele PROLOG sunt declarate in sectiunea constants, cu scopul de a fi folosite ulterior in program. Sintaxa: constants pi=3. 14 obiect=masina mesaj=“Eroare citire date de la tastatura…”
Sintaxa programelor PROLOGcontinuare l Domeniile (tipurile) care se folosesc in programele PROLOG se declara in sectiunea domains. Sintaxa: domains nume=string tarticol=articol(symbol, real)
Sintaxa programelor PROLOGcontinuare Tipurile predefinite in Turbo PROLOG sunt: – – – char caracter inclus intre apostroafe (‘a’); integer intreg in plaja (-32768, 32767); real numar real in plaja (1 e-307, 1 e+308); string secventa de caractere intre ghilimele (“Exemplu…. ”); symbol: l l secventa de litere, cifre si liniuta de subliniere, care incepe cu litera mica; Secventa de caractere intre apostroafe
Sintaxa programelor PROLOGcontinuare l Sectiunea in care se declara faptele si regulile de manipulare a acestora: clauses. Sintaxa: clauses are(maria, casa). are(petre, autoturism). are(petre, casa). este_bogat(X): are(X, casa), are(X, autoturism).
Sintaxa programelor PROLOGcontinuare l Sectiunea in care sunt declarate predicatele, ca interfata: predicates. Sintaxa: predicates are(symbol, symbol) este_bogat(symbol)
Sintaxa programelor PROLOGcontinuare / un exemplu complet domains Nume=string predicates are(symbol, symbol) este_bogat(symbol) clauses are(maria, casa). are(petre, autoturism). are(petre, casa). este_bogat(X): are(X, casa), are(X, autoturism). goal clearwindow, este_bogat(X), write(X), readln(Nume).
Programarea in PROLOG. Predicate predefinite de intrare/iesire Asemenea tuturor limbajelor de programare, PROLOG este inzestrat cu functii de intrare si iesire. Aceste functii de intrare si iesire sunt, de fapt, predicate specializate in efectuarea operatiilor de introducere a datelor in programele PROLOG si de extragere a rezultatelor din programele PROLOG. Prezentarea in continuare a predicatelor se va face prin nume, lista parametrilor si tipul acestora (de intrare-i sau de iesire-o).
Programarea in PROLOG. Predicate predefinite de intrare/iesire write(arg_1, arg_2, …, arg_n) (i, i, …, i) Predicatul este folosit pentru afisarea pe ecran a obiectelor mentionate in lista de argumente. writef(format, arg_1, arg_2, …, arg_n) Predicatul este folosit pentru afisarea formatata a datelor pe ecran
Programarea in PROLOG. Predicate predefinite de intrare/iesire Exemplu de format de afisare: write(“%-10. 2”, 1234. 75) readln(Sir) (o) Predicatul este folosit pentru citirea unui sir de caractere de la tastatura.
Programarea in PROLOG. Predicate predefinite de intrare/iesire readint(Intreg) (o) Predicatul este folosit pentru citirea unui intreg de la tastatura readreal(Real) (o) Predicatul este folosit pentru citirea unui numar real de la tastatura
Programarea in PROLOG. Predicate predefinite de intrare/iesire readchar(Caracter) (o) Predicatul este folosit pentru citirea de la tastatura a unui caracter. keypressed Predicatul este folosit pentru asteptarea introducerii unui caracter de la tastatura
Programarea in PROLOG. Predicate predefinite pentru prelucrarea sirurilor de caractere frontchar(Sir, Primul. Caracter, Rest. Sir) (string, char, string) (i, o, o), (i, i, o), (i, o, i), (i, i, i), (o, i, i) -Varianta (i, o, o) desparte sirul Sir in doua: primul caracter al lui Sir (Primul. Caracter)si restul sirului (Rest. Sir); -Varianta (o, i, i) concateneaza Primul. Caracter cu Rest. Sir si returneaza Sir;
Programarea in PROLOG. Predicate predefinite pentru prelucrarea sirurilor de caractere fronttoken(Sir, Token, Rest. Sir) (string, string) (i, o, o), (i, i, i), (o, i, i) (i, o, o) desparte sirul Sir in doua: primul cuvant al lui Sir si restul sirului Rest. Sir; (i, i, o), (i, o, i), (i, i, i) sunt folosite pentru verificari
Programarea in PROLOG. Predicate predefinite pentru prelucrarea sirurilor de caractere frontstr(Nr. Car, Sir, Prefix, Rest. Sir) (integer, string, string) (i, i, o, o) –Desparte Sir in doua: Prefix. Sir format din primele Nr. Car caracter si restul sirului (Rest. Sir).
Programarea in PROLOG. Predicate predefinite pentru prelucrarea sirurilor de caractere concat(Sir 1, Sir 2, Sir 3) (string, string) (i, i, o), (i, o, i), (o, i, i), (i, i, i) Verifica daca Sir 1 concatenat cu Sir 2 este Sir 3. str_len(Sir, Lungime) (string, integer) Lungime este lungimea sirului Sir
Programarea in PROLOG. Fisiere Turbo Prolog nu are facilitati deosebite de lucru cu fisiere, oferind cateva predicate cu care se pot stoca si regasi informatii de o manierea foarte simpla. Prolog vede un fisier prin intermediul unui nume simbolic declarat astfel: domains file=fistest Protocolul Prolog de lucru cu fisierele este: 1. 2. 3. 4. 5. Deschiderea fisierului; Redirectarea fluxului de informatii; Realizarea operatiilor de intrare/iesire; Inchiderea fisierului; Redirectarea catre tastatura sau display
Programarea in PROLOG. Fisiere Predicate pentru deschiderea unui fisier openwrite(Nume. Simbolic, Nume. EF) Deschide fisierul cu nume extern Nume. EF pentru operatii de scriere, in regim de creare openread(Nume. Simbolic, Nume. EF) Deschide fisierul cu nume extern Nume. EF pentru operatii de citire
Programarea in PROLOG. Fisiere openappend(Nume. Simbolic, Nume. EF) Deschide fisierul cu nume extern Nume. EF pentru operatii de adaugare la sfarsit. openmodify(Nume. Simbolic, Nume. EF) Deschide fisierul cu nume extern Nume. EF in acces direct. Pozitionarea in vederea scrierii se face cu predicatul: filepos(Nume. Simbolic, Pozitie, Mod)
Programarea in PROLOG. Fisiere Valorile parametrului Mod: 0 - referinta de pozitionare este inceputul fisierului; 1 – Referinta de pozitionare este pozitia curenta a pointerului de fisier 2 – Referinta de pozitionare este sfarsitul fisierului
Programarea in PROLOG. Fisiere Redirectarea fluxului de date Este vorba de redirectarea fluxurilor standard de input / output, care sunt: Tastatura – Input – Nume simbolic keyboard Ecranul – Output – Nume simbolic screen Imprimanta – Output – Nume simbolic printer Redirectare se face cu ajutorul predicatelor: readdevice(Nume. Simbolic) writedevice(Nume. Simbolic)
Programarea in PROLOG. Fisiere Exemplul 1: domains file=fistest goal clearwindow, openread(fistest, "aaprol 1. pro"), readdevice(fistest), readln(C), write(C).
Programarea in PROLOG. Fisiere Exemplul 2: domains file=fistest goal clearwindow, openmodify(fistest, "aaprol 1. pro"), writedevice(fistest), filepos(fistest, 4, 0), write("BOCUn"), closefile(fistest), writedevice(screen), openread(fistest, "aaprol 1. pro"), readdevice(fistest), readln(X), write(X).
Programarea in PROLOG. Fisiere Realizarea operatilor input/output Este posibila cu ajutorul predicatelor prezentate ca utile in raport cu echipamentele standard de intrare si iesire: readint, readreal, readchar, readln, writef, etc. Este evident faptul ca inainte de a folosi aceste predicate trebuie facuta redirectarea.
Programarea in PROLOG. Fisiere Inchiderea unui fisier: closefile(Nume. Simbolic) De mentionat ca daca dorim sa testam sfarsitul fisierului avem la dispozitie predicatul: eof(Nume. Simbolic)
Programarea in PROLOG. Fisiere De asemenea, mediul Turbo Prolog ofera posibilitatea de a efectua o serie de operatii care simuleaza comenzi ale sistemului de operare. Predicatele disponibile in acest scop sunt: existfile(Nume. F) – testeaza existenta fisierului de nume specificat; renamefile(Nume. FV, Nume. FN); deletefile(Nume. F) – sterge fisierul specificat din directorul curent); disk(Cale) – Stabilieste sau afiseaza directorul curent system(“Comanda SO”) –executia comenzii sistemului de operare specificata intre ghilimele.
2bd10b2117734da29447d2788021ccba.ppt