Sunteți pe pagina 1din 27

SISTEME EXPERT

Universitatea din Oradea


Anul universitar 2016-2017

Prof. Dr. Cornelia Győrödi

Sisteme Expert - (cgyorodi@uoradea.ro) 1


Curs 10

Predicate predefinite pentru baze de date interne


Baza de date externe
Predicatele predefinite pentru bazele de date
externe

prof. dr. ing. Cornelia Gyorodi 2


Predicatele predefinite pentru baza de date

a) assert(clauza) - adaugă o înregistrare (un fapt) la


baza de date
Exemplu:
class predicates
fillDatabase : () procedure.

clauses
fillDatabase() :-
assert(person("1", "John", "85", "185", "110")),
assert(person("2", "Thomas", "75", "190", "150")),
assert(person("3","Anna", "65", "175", "123")),
assert(person("4", "Lidy", "55", "160", "135")),
stdIO::write("Baza de date a fost incarcata"), stdIO::nl.

prof. dr. ing. Cornelia Gyorodi 3


Predicatele predefinite pentru baza de date
(continuare)
b) clauseChain::asserta/1 (predicatul asserta din clasa
clauseChain) - adaugã o clauzã de tip fapt la începutul unui
tabel și are sintaxa :
asserta(clause Clauza).
c) clauseChain::assertz/1 - adaugã la sfârșitul unui tabel o
clauză
assertz(clause Clauza).
d) file::save/2 - salvează faptele din baza de date, într-un
fisier text
save(string Nume_Fisier,factDB Fapt).
e) clauseChain::retract/1 - șterge o clauză din tabelul curent
retract(clause Clauza) determ.
prof. dr. ing. Cornelia Gyorodi 4
Predicatele predefinite pentru baza de date
(continuare)

f) pie::retractAll/0 - șterge toate clauzele din


interpretorul PIE
retractAll().
g) inputStream::consult/1 - citește fapte dintr-un
fisier
consult(factDB Fapt).
h) file::consult/2 – citește fapte dintr-un fișier și le
adaugă la sfârșitul bazei de date specificate:
consult(string Nume_Fisier, factDB Fapt).

prof. dr. ing. Cornelia Gyorodi 5


Operații cu baze de date interne
Bazele de date interne prezintă dezavantajul că, după
închiderea programului, datele (înregistrările) inserate în
bază se pierd.
Aceste date pot fi totuși salvate pe disc, într-un fisier și la o
nouă execuție a programului, fisierul poate fi consultat.
Pentru salvarea unei baze de date într-un fisier, ea trebuie
declarată, în secțiunea class facts, astfel:

class facts - personDB


person : (string ID, string Name, string Weight, string Length, string IQ).

prof. dr. ing. Cornelia Gyorodi 6


Salvarea unei baze de date interne
Pentru salvarea unei baze de date interne într-un
fișier pe disc, se folosește predicatul predefinit
save/2 din clasa file:
file::save("persoanaDB.txt", persoanaDB).
Exemplu:
class facts - personDB
person : (string ID, string Name, string Weight, string Length,
string IQ).
class predicates
saveDatabase:() procedure.

prof. dr. ing. Cornelia Gyorodi 7


Salvarea unei baze de date interne
clauses
saveDatabase() :-
file::existFile("personDB.txt"), !,
file::delete("personDB.txt"),
file::save("personDB.txt", personDB),
stdIO::write("Baza de date a fost salvata in fisierul personDB.txt"), stdIO::nl.

saveDatabase() :-
file::save("personDB.txt", personDB),
stdIO::write("Baza de date a fost salvata in fisierul personDB.txt"), stdIO::nl.

prof. dr. ing. Cornelia Gyorodi 8


Consultarea unei baze de date

Predicatul care consultă fișierul și încarcă baza de


date este predicatul predefinit consult/2 din clasa
file:
file::consult("persoanaDB.txt", persoanaDB)
Exemplu:

class predicates
consultDatabase : () procedure.

prof. dr. ing. Cornelia Gyorodi 9


Consultarea unei baze de date

clauses
consultDatabase() :-
file::consult("personDB.txt", personDB),
stdIO::write("Inregistrarile au fost adaugate din fisierul perso
nDB.txt"), stdIO::nl.

prof. dr. ing. Cornelia Gyorodi 10


Ștergerea unei înregistrări dintr-o bază de date
internă
Predicatul predefinit care șterge o înregistrare
dintr-o bază de date este: retract/1.
retract(clause Clauza).
Pentru modificarea valorilor dintr-o înregistrare,
se pot folosi două preficate predefinite : retract/1
și assertz/1.
Se va șterge mai întâi linia cu vechile valori, după
care se inserează o linie (o înregistrare cu noile
valori).

prof. dr. ing. Cornelia Gyorodi 11


Exemplu

Un program scris în Visual Prolog care operează


asupra unei baze de date interne, adaugă axiome
(fapte noi), afișează conținutul baze de date și
salvează conținutul bazei de date într-un fișier
specificat.

prof. dr. ing. Cornelia Gyorodi 12


Exemplu (continuare)
implement main
open core, stdIO, list

class facts - personDB


person : (string ID, string Name, string Weight, string Length, string IQ).

class predicates
fillDatabase : () procedure.

clauses
fillDatabase() :-
assert(person("1", "John", "85", "185", "110")),
assert(person("2", "Thomas", "75", "190", "150")),
assert(person("3","Anna", "65", "175", "123")),
assert(person("4", "Lidy", "55", "160", "135")),
stdIO::write("Baza de date a fost incarcata"), stdIO::nl.
prof. dr. ing. Cornelia Gyorodi 13
Exemplu (continuare)
class predicates
listDatabase : () procedure.

clauses
listDatabase() :-
person(ID, Name, Weight, Length, IQ),
stdIO::write("ID: ", ID, ", Name: ", Name, ", Weight: ", We
ight, ", Length: ", Length, ", IQ: ", IQ),
stdIO::nl,
fail.
listDatabase().

prof. dr. ing. Cornelia Gyorodi 14


Exemplu (continuare)
class predicates
addPerson : (string Name, string Weight, string Length, string
IQ) procedure.

clauses
addPerson(Name, Weight, Length, IQ) :-
findAll(ID, person(ID, _, _, _, _), IDList),
NewID = toString(toTerm(maximum(IDList)) + 1),
assertz(person(NewID, Name, Weight, Length, IQ)),
stdIO::write("Persoana ", Name, " a fost adaugata cu ID: ",
NewID), stdIO::nl.

prof. dr. ing. Cornelia Gyorodi 15


Exemplu (continuare)
class predicates
saveDatabase:() procedure.

clauses
saveDatabase() :-
file::existFile("personDB.txt"), !,
file::delete("personDB.txt"),
file::save("personDB.txt", personDB),
stdIO::write("Baza de date a fost salvata in fisierul personD
B.txt"), stdIO::nl.
saveDatabase() :-
file::save("personDB.txt", personDB),
stdIO::write("Baza de date a fost salvata in fisierul personD
B.txt"), stdIO::nl.
prof. dr. ing. Cornelia Gyorodi 16
Exemplu (continuare)

class predicates
consultDatabase : () procedure.

clauses
consultDatabase() :-
file::consult("personDB.txt", personDB),
stdIO::write("Inregistrarile au fost adaugate din fisier
ul personDB.txt"), stdIO::nl.

prof. dr. ing. Cornelia Gyorodi 17


Exemplu (continuare)
clauses
run():-
console::init(),
fillDatabase(),
stdIO::write("Numele:"),
X = stdIO::readLine(),
stdIO::write("Weight:"),
X1 = stdIO::readLine(),
stdIO::write("Lenght:"),
X2 = stdIO::readLine(),
stdIO::write("IQ:"),
X3 = stdIO::readLine(),
addPerson(X, X1, X2, X3),
listDatabase(),
saveDatabase(),
consultDatabase().
end implement main
goal
console::runUtf8(main::run). 18
Modalităţi de a introduce axiome

Există trei modalităţi de a introduce axiome într-o


bază de date internă:
a) Axiomele să facă parte din secţiunea „clauses“.
b) În timpul execuției, folosind predicatele
predefinite din PROLOG asserta şi assertz .
c) Prin încărcarea axiomelor dintr-un fişier de tip
bază de date internă, folosind predicatul predefinit
consult.

prof. dr. ing. Cornelia Gyorodi 19


Baze de date externe în Visual Prolog

Clasa chainDB, din pachetul chainDB (interface


chainDB), conține predicate pentru lucrul cu baze
de date externe.
Operațiile de creare și deschidere a unei baze de
date externe utilizează constructorul clasei
chainDB, care returnează un obiect pentru
accesarea bazei de date.
Pot fi create mai multe baze de date externe (un
număr nelimitat) care pot fi accesate simultan.

prof. dr. ing. Cornelia Gyorodi 20


Predicate predefinite pentru baze externe
Visual Prolog

a) Pentru crearea unei baze de date externe, se folosește


predicatul chainDB::db_create/2, cu sintaxa:

db_create:(string Name, place Place).


Se creează o bază de date externă goală, cu numele
fisierului Name. Baza de date se creează într-un fișier sau
în memorie, în funcție de valoarea argumentului al doilea
astfel:
place = in_memory(); % baza de date se crează în memorie
in_file(). % baza de date se crează în fișier

prof. dr. ing. Cornelia Gyorodi 21


Predicate predefinite pentru baze externe
Visual Prolog

Predicatul db_create genereazã eroare dacă al doilea


argument este in_file și nu este posibilã crearea
fișierului specificat.
b) Deschiderea unei baze de date externe pentru
citire și scriere se realizează cu predicatul
chainDB::db_open/2, cu sintaxa:
db_open:(string Name, place Place).
Baza de date se deschide într-un fisier sau în
memorie, în funcție de valoarea celui de-al doilea
argument astfel: in_memory sau in_file.
prof. dr. ing. Cornelia Gyorodi 22
Predicate predefinite pentru baze externe
Visual Prolog

c ) Pentru ștergerea unei baze de date externe, se


foloseste predicatul chainDB::db_delete/2, cu
sintaxa:
db_delete:(string Name, place Place).
Dacă baza de date externă este deschisă, se
generează eroare. Dacă baza de date este situată în
memorie, predicatul db_delete eliberează memoria
ocupată. Dacă baza este stocată pe disc, într-un
fișier, se șterge fișierul.

prof. dr. ing. Cornelia Gyorodi 23


Predicate predefinite pentru baze externe
Visual Prolog

d) Încărcarea unei baze de date externe dintr-un


fișier de pe disc, se realizează cu predicatul
chainDB::cdb_load/2, cu sintaxa:
db_load:(string File, string Name).

Predicatul db_load copiază baza de date din fișierul


File, în baza Name creată în memorie.

prof. dr. ing. Cornelia Gyorodi 24


Exemplu
Un program scris în Visual Prolog care operează asupra unei baze
de date: șterge informațiile dintr-o bază de date specificată, încarcă
informații dintr-un fișier specificat în baza de date și afișează
conținutul bazei de date.
implement main
open core

class facts - persoanaDB


persoana : ( string Nume, string Adresa, integer Virsta, char Sex).
class predicates
getData : () procedure.
clauses
getData() :-
stdIO::write("Doriti stergerea inregistrarilor inainte de consultarea baze de date?"),
Answer = stdIO::readLine(),
Answer = "Yes", !,
retractFactDB(persoanaDB),
file::consult("persoanaDB.txt", persoanaDB),
stdIO::write("Inregistrarea a fost stearsa \nNoi inregistrari au fost adaugate din persoanaDB.txt")
, stdIO::nl.

prof. dr. ing. Cornelia Gyorodi 25


Exemplu (continuare)
getData() :-
file::consult("persoanaDB.txt", persoanaDB),
stdIO::write("Noi inregistrari au fost adaugate din persoa
naDB.txt"), stdIO::nl.
class predicates
consultDatabase : () procedure.
clauses
consultDatabase() :-
file::existFile("persoanaDB.txt"), !,
getData().
consultDatabase() :-
stdIO::write("Nu exista fisierul persoanaDB.txt ").
class predicates
listDatabase : () procedure.
prof. dr. ing. Cornelia Gyorodi 26
Exemplu (continuare)
clauses
listDatabase() :-
persoana(Nume, Adresa, Virsta, Sex),
stdIO::write("Nume: ", Nume, ", Adresa: ", Adresa, ", Virsta: ", Virsta, ", Sex:
", Sex),
stdIO::nl,
fail.
listDatabase().
clauses
run():-
console::init(),
consultDatabase(),
listDatabase(),
consultDatabase(),
listDatabase().
end implement main
goal
console::runUtf8(main::run).
27

S-ar putea să vă placă și

  • IT Mar05
    IT Mar05
    Document3 pagini
    IT Mar05
    livialst
    Încă nu există evaluări
  • Curs 6
    Curs 6
    Document29 pagini
    Curs 6
    Mihaela Morosan
    Încă nu există evaluări
  • Managementul Resurselor Umane Referat
    Managementul Resurselor Umane Referat
    Document25 pagini
    Managementul Resurselor Umane Referat
    Mihaela Morosan
    Încă nu există evaluări
  • Plan
    Plan
    Document6 pagini
    Plan
    Mihaela Morosan
    Încă nu există evaluări
  • Managementul Resurselor Umane Referat
    Managementul Resurselor Umane Referat
    Document25 pagini
    Managementul Resurselor Umane Referat
    Mihaela Morosan
    Încă nu există evaluări
  • 2subiecte Retele 2020
    2subiecte Retele 2020
    Document36 pagini
    2subiecte Retele 2020
    Mihaela Morosan
    Încă nu există evaluări
  • 2subiecte Retele 2020
    2subiecte Retele 2020
    Document36 pagini
    2subiecte Retele 2020
    Mihaela Morosan
    Încă nu există evaluări
  • Curs 7
    Curs 7
    Document19 pagini
    Curs 7
    Mihaela Morosan
    Încă nu există evaluări
  • Curs 4
    Curs 4
    Document27 pagini
    Curs 4
    Mihaela Morosan
    Încă nu există evaluări
  • Curs 3 PDF
    Curs 3 PDF
    Document55 pagini
    Curs 3 PDF
    Mihaela Morosan
    Încă nu există evaluări
  • Rezumat
    Rezumat
    Document10 pagini
    Rezumat
    Mihaela Morosan
    Încă nu există evaluări
  • Referat
    Referat
    Document13 pagini
    Referat
    Andrei Roșcan
    Încă nu există evaluări
  • Curs 8
    Curs 8
    Document19 pagini
    Curs 8
    Mihaela Morosan
    Încă nu există evaluări
  • Curs 9
    Curs 9
    Document15 pagini
    Curs 9
    Mihaela Morosan
    Încă nu există evaluări
  • Curs 10 PDF
    Curs 10 PDF
    Document27 pagini
    Curs 10 PDF
    Mihaela Morosan
    Încă nu există evaluări
  • Touch Screen
    Touch Screen
    Document12 pagini
    Touch Screen
    Mihaela Morosan
    Încă nu există evaluări
  • Referat IP
    Referat IP
    Document6 pagini
    Referat IP
    Mihaela Morosan
    Încă nu există evaluări
  • Otl Oradea
    Otl Oradea
    Document6 pagini
    Otl Oradea
    Iulian
    Încă nu există evaluări
  • Calea Culorii
    Calea Culorii
    Document12 pagini
    Calea Culorii
    Mihaela Morosan
    Încă nu există evaluări
  • Arduino
    Arduino
    Document15 pagini
    Arduino
    Mihaela Morosan
    100% (2)
  • Calea Culorii
    Calea Culorii
    Document12 pagini
    Calea Culorii
    Mihaela Morosan
    Încă nu există evaluări
  • Touch Screen
    Touch Screen
    Document12 pagini
    Touch Screen
    Mihaela Morosan
    Încă nu există evaluări
  • Imprimanat
    Imprimanat
    Document19 pagini
    Imprimanat
    Mihaela Morosan
    Încă nu există evaluări
  • Imprimanat
    Imprimanat
    Document19 pagini
    Imprimanat
    Mihaela Morosan
    Încă nu există evaluări
  • Curricula - Anul 4
    Curricula - Anul 4
    Document1 pagină
    Curricula - Anul 4
    Mihaela Morosan
    Încă nu există evaluări