Documente Academic
Documente Profesional
Documente Cultură
Pelin
Programarea
logică
în proiectarea sistemelor informaţionale
Chişinău, 2011
Limbajul Prolog
Pelin, S.
55 ex.
ISBN 978-9975-76-061-4.
510.62/.63+004.432.4(075.8)
P 49
Prezenta lucrare este consacrată aspectelor teoretice şi practice ale programării logice şi
utilizării lor în proiectarea sistemelor informaţionale.
În acest scop sunt descrise metodele logice utilizate în teoria programelor scrise în limbajul de
programare Prolog şi interpretarea lor automată pentru soluţionarea problemelor; tehnica
programării în limbajul Prolog; prezentarea logică a lumii reale pentru modelarea ei în sisteme
informaţionale. Pe de altă parte, este descris sistemul SPprolog - mediu computerizat pentru
suportul în proiectarea şi studierea de sine stătătoare a limbajului Prolog, precum şi metoda de
structurare a cunoştinţelor prin intermediul „Matricei elementelor de cunoştinţă”, ultima fiind
necesară la etapa de preproiectare a sistemelor informaţionale.
Lucrarea poate servi drept suport de curs pentru studenţi, masteranzi şi profesori de profil
informatic la studierea şi predarea ciclului de discipline ce ţin de metodele logice în sistemele
informaţionale, precum savanţilor şi specialiştilor în modelarea logică a sistemelor informatice.
Recenzenţi ştiinţifici: Chiriac Liubomir, doctor-hab. în şt. fiz.-mat., şef catedră informatică şi tehnologii
informaţionale, Universitatea de Stat Tiraspol
Capatina Gheorghe, doctor-ing., şef.catedra tehnologii de programare Universităţii de Stat din Moldova
Cuprins
Prefaţă....................................................................................................
7
Întroducere...........................................................................................
9
1.2.Programarea logică ca
teorie .........................................................15 Logica
Limbajul Prolog
propoziţională ......................................................................
15
Disjunctul ......................................................................................... 16
Logica predicatelor........................................................................... 18
2.2.Elemente de teorie
....................................................... ................ 31
Unificarea ........................................................................................ 34
2.6.Întrebări şi
exerciţii ................................................................... 41
3.2.Privire generală
........................................................................ 43
Fapte ............................................................................................. 51
Reguli ........................................................................................... 53
Variabile ........................................................................................ 56
Exerciţii ........................................................................................... 61
Relaţiile logice................................................................................. 62
Limbajul Prolog
Intrări/Ieşiri ..................................................................................... 63
Unificare ......................................................................................... 66
Exerciţii ........................................................................................... 66
Backtraking ...................................................................................... 67
Exerciţii ........................................................................................... 71
Exerciţii ........................................................................................... 77
Funcţii ............................................................................................. 78
Exerciţii ........................................................................................... 81
Liste ................................................................................................ 81
Arbori ............................................................................................. 86
Limbajul Prolog
Exerciţii .......................................................................................... 91
Exerciţii .......................................................................................... 96
Fişiere ............................................................................................ 98
Exerciţii ..........................................................................................100
3.4.Sisteme Expert
............................................................................ 100
4.3.Predicate
predifinite................. .................................................. 110
Limbajul Prolog
5.4.Posibilităţile SPprolog
................................................................. 124
5.5.Utilizarea sistemului
..................................................................... 131
6.3.Strawberry Prolog
....................................................................... 140
6.4.Limbajul tuProlog
....................................................................... 148
6.5.Visual Prolog
................................................................................ 150
6.6.Întrebări şi exerciţii
..................................................................... 152
7.2.Unele noţiuni şi
definiţii. .......................................................... 153
7.4.Întrebări şi exerciţii
..................................................................... 171
8.3.Unele concretizări
...................................................................... 184
8.7.Întrebări şi exerciţii
..................................................................... 201
Bibliografie .....................................................................................
203
Anexe .................................................................................................
207
I. Codurile
erorilor ............................................................................. 207
de
laborator ...........................................................................................
217
Limbajul Prolog
a) b) c)
ask :-
ask:-
X = Ion
Întrebare Răspunsul
Întrebare în Prolog
în limbajul natural Prologului
X = laptop,
Dacă aparţine
apartine(X, [carte, masa, Yes
obiectul listei?
ceas, laptop, agenda])
X = carte
X = masa
Care sunt apartine(X, [carte, masa,
X = ceas
obiectele listei? ceas, laptop, agenda])
X = laptop
X = agenda
Limbajul Prolog
rebus(T,O,G,U):-
Numere = [0,1,2,3,4,5,6,7,8,9],
apartine( T, Numere),
apartine( O, Numere),
apartine( G, Numere),
apartine( U, Numere),
Fapte
ask
ASK
Ask_1
ask_szstem5
ask
Limbajul Prolog
aSK
ask_1
ask_sistem5
ASK
Ask_1
pam tom
parinte ( pam , bob ).
bob liz parinte ( tom , bob ).
Exemplul 2:
Reguli
capul_regulii if corpul_regulii.
cap:-
corp.
relaţien(obiectn,1,obiectn,2,…,obiectn,kn).
if :-
and ,
or ;
Exemplul 3:
fapte:
femeie ( pam ).
mama ( X, Y ) if
Limbajul Prolog
parinte ( X, Y) and
femeie (X).
Exemplul 4:
auto(BMW,_524td,1984,220,diesel,automat,negru,2.4,yes,3000).
auto(BMW,_525,1990,260,benzin,manual,alb,2.5,yes,6000).
auto(FORD,transit,1986,180,benzin,manual,alb,2.3,yes,4000).
auto(WV,golf,1995,280,benzin,manual,rosu,2.0,yes,6000).
auto(Honda,civic,1998,280,benzin,manual,negru,3.1,yes,9000).
automobil_sportiv( X ):-
Cutia_de_viteze = manual.
Variabile
X=X+1 (5=5+1)
nu este logică!!! Dacă într-o clauză o variabilă apare de mai multe ori,
atunci ea va avea aceeaşi valoare. Modificarea variabilei se face
printr-o altă variabilă: X2=X+1. Însă două clauze pot folosi acelaşi
nume pentru o variabilă, neexistând nici un fel de legătură între ele.
Transmisia valorilor variabilelor între clauze se face prin argumentele
predicatelor.
Exemplul 5:
clauza_1:-
X=5,
X2=X*2,
clauza_2(X2).
clauza_2(X2):-write(“X2=”,X2).
Exemplul 6:
clauza_1:-
X=5,
clauza2(X2),
X3 = X + X2,
write (X3).
clauza_2(X2):-
X2 = 4.
/*====================================
Comentariu
=====================================*/
% Comentariu
DOMAINS
Limbajul Prolog
DATABASE
PREDICATES
% <declararea predicatelor>
CLAUSES
% <afirmaţiile>
GOAL
% <afirmaţiile de scop>
DOMAINS
nume_simbolic_al_termului_1=symbol
nume_simbolic_al_termului_2=integer
file= nume_simbolic_al_fisierului
DATABASE
age_db(nume_simbolic_al_termului_1,
nume_simbolic_al_termului_2)
PREDICATES
age(nume_simbolic_al_termului_1,
nume_simbolic_al_termului_2)
Scopuri (întrebări)
█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀█
█┌──────────────────────────────────────────────┐█
█└──────────────────────────────────────────────┘█
█│Predicates │ │GOAL: │█
█│Clauses ││ │█
█│ │ │2 Solutions │█
█│ ││ │█
█│ ││ │█
█└──────────────────────────┘ └─────────────────┘█
█│ ││ │█
█│ ││ │█
█└──────────────────────────┘ └─────────────────┘█
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀
█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀█
█┌──────────────────────────────────────────────┐█
█└──────────────────────────────────────────────┘█
█│Predicates │ │bill │█
█│Clauses │ │ar │█
█│Goal ││ │█
█│ parinte(X,bob), ││ │█
█│ write(X). ││ │█
█└──────────────────────────┘ └─────────────────┘█
█│ ││ │█
█│ ││ │█
█└─────────────────────────┘ └──────────────────┘█
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-▀
Exerciţii
Limbajul Prolog
p(cuvânt_concret,Y) - valoarea Y
parinte (X,Y).
femeie (nume_concret).
femeie (X).
nume = SYMBOL
PREDICATES
CLAUSES
femeie (pam).
femeie (liz).
femeie (ann).
femeie (pat).
barbat (bob).
barbat (tom).
barbat (jim).
SAU
SAU
timpul(miine,bun)
SAU
timpul(miine,bun)
SAU
timpul(miine,bun)
timpul(miine,bun) :-
Limbajul Prolog
timpul(miine,bun) :-
timpul(miine,bun) :-
este(azi, anunţal_la_radio).
Intrări/Ieşiri
write
Prototipul:
(i)
Limbajul Prolog
Exemplu:
X=„Ion”,
write („Bine aţi venit domnule(nă) ”,X).
Scrie pe ecran:
readln
Formatul:
readln (Arg)
Prototipul:
(o)
Exemplu:
readln(X)
Modificaţii:
readint(integer)
readchar(char)
Limbajul Prolog
readreal(real)
Lucrul cu ferestrele
makewindow
Formatul:
Prototipul:
-----------+---------+----------------+------------
Limbajul Prolog
Black 0 Black 0
Blue 16 Blue 1
Green 32 Green 2
Cyan 48 Cyan 3
Red 64 Red 4
Magenta 80 Magenta 5
Brown 96 Brown 6
Grey 8
Light Blue 9
Light Green 10
Yellow 14
0 col 8
0 0
row Heade
r
heig
ht
25
widt
h
Limbajul Prolog
Exemplu:
Unificare
termen1 = termen2
executată
Variabilă ce conţine Variabilă ce conţine
Comparaţie
o valoare o valoare
Exerciţii
sport_car(marca_sportiva,seria_sportiva)
sport_car(marca_ne_sportiva,seria_ne_sportiva)
automobil_de_familie
automobil_de_prestigiu
automobil_pentru_dame
automobil_de_anticariat
PREDICATES
CLAUSES
Backtraking
Esenţa mecanismului
Limbajul Prolog
Goal
Punct de ramificare 1
B Soluţie
C Soluţie
1a 2a
Soluţie Soluţie
Soluţie Soluţie
Soluţie 1c 2c
1b 1b nu
Dacă soluţia 3b
2b
satisface scopul (este
falsă), revine la punctul de
ramificare B şi selectează
următoarea soluţie.
Limbajul Prolog
Exemplul 1:
PREDICATES
country(STRING)
Moldova
print_countries Romania
Germania
CLAUSES Bulgaria
country(“Moldova”).
Country(“Romania”).
Country(“Germania”).
Country(“Bulgaria”).
Print_countries :-
Limbajul Prolog
country (X),
write (X),nl,
fail.
Print_countries.
GOAL
print_countries.
Exemplul 2:
PREDICATES
>Chisinau
country (STRING) Moldova
Romania
capital (STRING) Germania
Bulgaria
print_countries
>Bucuresti
CLAUSES Moldova
country (“Moldova”). Romania
Germania
Country (“Romania”). Bulgaria
Capital (“Bucuresti”).
Capital (“Berlin”).
Print_countries :-
Limbajul Prolog
capital (Y),
write (“>”,Y),
nl,
country (X),
write (X),
nl,
fail.
Print_countries.
GOAL
print_countries.
Exemplul 3:
PREDICATES
country (STRING)
Chişinău> Moldova
capital (STRING) Chişinău>Romania
Chişinău>Germania
print_countries Chişinău>Bulgaria
CLAUSES Bucureşti>Moldova
Bucureşti>Romania
country (“Moldova”). Bucureşti>Germania
Bucureşti>Bulgaria
Country (“Romania”). Berlin >Moldova
Berlin >Romania
Country (“Germania”). Berlin >Germania
Berlin >Bulgaria
Country (“Bulgaria”).
Limbajul Prolog
Capital (“Chişinău”).
Capital (“Bucureşti”).
Capital (“Berlin”).
Print_countries :-
capital (Y),
country (X),
write (Y,”>”),
write (X),
nl,
fail.
Print_countries. 00000000
00000001
GOAL
00000010
print_countries. 00000011
00000100
00000101
00000110
00000111
00001000
Exemplul 4: 00001001
PREDICATES 00001010
00001011
bit (INTEGER) 00001100
00001101
byte 00001110
00001111
CLAUSES 00010000
bit (0).
Limbajul Prolog
Bit (1).
Byte :-
write (X1,X2,X3,X4,X5,X6,X7,X8),
nl,
fail.
Byte.
GOAL
byte.
Exerciţii
TETA
BETA
GAMMA
Limbajul Prolog
şi
DONALD
GERALD
ROBERT
1. Lista automobilelor
?–
Jean a fost omorât marţi. Singurii suspecţi sunt Luc, Paul, Alain,
Bernard şi Louis. Se ştie că:
- asasinul este cineva care doreşte sa-l omoare pe Jean, are armă şi n-
are un alibi valabil pentru marţi;
- cineva poate dori să-l omoare pe Jean dacă are acest interes sau
dacă doreşte să se răzbune;
Repetiţia şi recursia
<acţiune_repetata>:-
<predicat_cu_punct_de_backtracking>,
<acţiune>,
fail.
<acţiune_repetata>.
<acţiune_repetata>:-
<predicat_cu_punct_de_backtracking>,
<acţiune>,
<condiţie de oprire>.
<acţiune_repetata>.
Limbajul Prolog
Prima metodă este folosită pentru a prelucra toate faptele din baza
de date. Se poate scrie un predicat, numit (generic) repeat, care să
creeze punctul de backtracking
repeat.
repeat:-repeat.
Exemplul 1:
PREDICATES
CLAUSES
factorial ( 1 , 1 ) :- !.
factorial ( X , FX ) :-
Y = X-1,
factorial ( Y , FY ),
FX = FY * X.
GOAL
write(“introduceti N:”),
readln(N),
Exemplul 2:
Limbajul Prolog
PREDICATES
functie (INTEGER)
menu
CLAUSES
menu:-
write(“5. Iesire”),nl,
write(“------------------------”),
readint(X),
functie(X).
!,
menu.
Menu: - menu.
Functie(1):-
Functie(4):-
Functie(5):-
exit.
GOAL
makewindow(1,23,23,”program”,0,0,25,80),
menu.
Exemplul 3:
PREDICATES
parinte (SYMBOL,SYMBOL)
Goal:
stramos (SYMBOL,SYMBOL)
stramos(pam,jim)
CLAUSES Yes
parinte(X,Y).
stramos(X,Y):-
parinte(X,Z),
stramos(Z,Y).
Exemplul 4:
Ciclu infinit
Hello world!
Hello world!
PREDICATES
Hello world!
repetare
Hello world!
GOAL
Hello world!
repetare
Hello world!
CLAUSES
Hello world!
repetare:-
Hello world!
write(“Hello world!“),
nl, Hello world!
repetare.
Limbajul Prolog
Exemplul 5:
Ciclu finit
PREDICATES
repetare(integer)
Hello world!
CLAUSES
repetare(0).
repetare(X):-
write(“Hello world!“),nl,
X2=X-1,
repetare(X2).
Exemplul 6:
2. Hello world!
PREDICATES 1. Hello world!
repetare(integer)
GOAL
Limbajul Prolog
repetare(3).
CLAUSES
repetare(0).
repetare(X):-
write(X,“Hello world!“), nl,
X2=X-1,
repetare(X2).
Exemplul 7:
Ciclu finit
1. Hello world!
2. Hello world!
PREDICATES
3. Hello world!
repetare(integer)
GOAL
repetare(3).
CLAUSES
repetare(0).
repetare(X):-
X2=X-1,
repetare(X2),
write(X,“Hello world!“),nl.
Exerciţii
Limbajul Prolog
x dacă n = 1.
x dacă y = 0
-x dacă y = 1
f(x,y) =
(de la 1 la N):
█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀█
█┌──────────────────────────────────────────────┐█
█│ │█
█│ │█
█│ nnnnnnnnnnnnnnnnnN │█
█│ n │█
█│ n │█
█│ n │█
█│ nn │█
█│ │█
█│ │█
█│ │█
█└──────────────────────────────────────────────┘█
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀
Limbajul Prolog
Obiecte compuse
DOMAINS
PREDICATES
sau
DOMAINS
CAPACITATEA = INTEGER
MOTORUL = motor(CAPACITATEA,TIP_CONBUSTIBIL)
NUME = nume(NUME,PRENUME)
PREDICATES
sofer(NUME,DATA_NASTERE,AUTO)
Funcţii
Limbajul Prolog
PREDICATES
CLAUSES
Procesarea şirurilor
frontchar(String,FrontChar,RestString)
(string,char,string)
GOAL
X = „Prolog”,
frontchar(X,C,REST),
Limbajul Prolog
C = ‘P’
REST = „Prolog”
fronttoken(String,Token,RestString)
(string,string,string)
GOAL
fronttoken(X,TOKEN,REST),
...
TOKEN = ‘Prolog’
frontstr(Lenght,Inpstring,StartString,RestString)
(integer,string,string,string)
(i,i,o,o)
GOAL
frontstr(5,X, A,B),
A = ‘Prolo’
concat(String1,String2,String3)
(string,string,string)
Limbajul Prolog
GOAL
X = „Prolog este”,
Y= „ un limbaj al viitorului”,
concat(X,Y,Z),
str_len(String,Length)
(string,integer)
GOAL
X = „Prolog”,
str_len(X,LEN),
...
LEN = 6.
upper_lower(StringInUpperCase,StringInLowerCase) (string,string) -
(i,i) (i,o) (o,i)
Aritmetica în Prolog
Funcţii: sin, cos, tan, arctan, ln, log, exp, sqrt, round, trunc, abs
Exerciţii
+
-
/
Limbajul Prolog
*
^2
sin
cos
convertor valută
De exemplu:
My name is Sergiu.
Liste
[1,2,3,4]
Exemplu:
[1,2,3,4,5,6,7]
[a,b,c,d,e,f]
[“CD-ROM”,”Hard Drive”,”Mouse”,”Keyboard”]
O listă constă din două părţi: Capul – primul element din listă şi
Coada – restul elementelor ce formează tot o listă:
Coada listei
[H|T]
Coada listei
[ 1 | [2, 3, 4, 5, 6] ] Capul listei
Coada listei
[ H1, H2, H3 | T ]
Coada listei
[ 1, 2, 3| [ 4, 5, 6] ]
Capul listei
Capul 1
Capul 3
Capul 2
Limbajul Prolog
[a,b] a [b]
[a] a []
[] - -
[cat, dog, horse] cat [dog, horse]
Lista Semnificaţie
[X|Y] [] No
[X|Y] [X|[Y]] No
DOMAINS
INTEGERLIST = integer*
Elementele unei liste pot fi orice tip de date inclusiv şi alte liste. Însă
toate elementele din listă trebuie să aparţină unuia şi aceluiaşi tip:
DOMAINS
STRINGLIST = string*
Limbajul Prolog
MULTY_LEVEL_LIST = STRINGLIST*
elementlist = elements*
Exemplul 1:
DOMAINS
SLIST= STRING*
PREDICATES
show_list(SLIST)
CLAUSES
show_list( [] ).
write(H),
nl,
show_list(T).
GOAL
Limbajul Prolog
show_list([“bmw”, ”volvo”,”ford”,”citroen”,”renault”,
”ford”,”fiat”,”opel”,”mazda”]).
Exemplul 2:
DOMAINS
CHAR_LIST = char*
PREDICATES
CLAUSES
list_len([],0).
list_len([H|T],N2):-
list_len(T,N),
N2=N+1.
GOAL
Exemplul 3
DOMAINS
ILIST = integer*
PREDICATES
append( ILIST,ILIST,ILIST)
Limbajul Prolog
CLAUSES
append([],Ys,Ys).
append([X|Xs],Ys,[X|Zs]):-
append(Xs,Ys,Zs).
GOAL
Exemplul 4:
DOMAINS
ILIST = integer*
PREDICATES
member( INTEGER,ILIST)
CLAUSES
member(X, [X|_] ).
member(X,Xs).
GOAL
member( 2, [1,2,3]),
Exemplul 5
DOMAINS
ILIST = integer*
PREDICATES
eliminare(INTEGER,ILIST,ILIST)
CLAUSES
eliminare(X,[Cap|Xs],[Cap|Ys]):-
eliminare(X,Xs,Ys).
GOAL
Arbori
b c d
e f g
arc(a,b).
arc(a,c).
arc(a,d).
arc(c,e).
arc(c,f).
arc(d,g).
Arborele binar este un arbore în care fiecare nod are cel mult doi
succesori. De obicei, succesorii se numesc nodul stânga şi nodul
dreapta. Arborii binari sunt folosiţi mai ales ca arbori binari de
căutare.
Limbajul Prolog
b c
d e f
Edinet 80
Soroca
75 65
Balti
95
Orhei
150
53
Chisinau
94
Ungheni 76
Tiraspol
95
106
130
Leova
48 Comrat
72
79
Cahul
Limbajul Prolog
cale2(A,B,L):-
cale(A,B,L);
cale(B,A,L).
traseu( A, B):-
cale( A, B).
Limbajul Prolog
Traseul din A în B există dacă există cale din A într-un alt oraş, spre
exemplu C, şi din oraşul C există traseu în oraşul B:
traseu( A, B):-
cale( A, C),
traseu( C, B).
liste.
traseu( A, B, Ruta,X):-
cale2( A, B),
append(Ruta,[B],X).
traseu( A, B, Ruta,X):-
cale2( A, C, L),
traseu( C, B, Ruta2,X).
cale2( A, B,Lungimea),
append(Ruta,[B],X).
cale2( A, C, L),
Lungimea2 = Lungimea+L.
DOMAINS
symbolList = symbol*
PREDICATES
CLAUSES
cale2(A,B,L):-cale(A,B,L);cale(B,A,L).
cale2( A, B,Lungimea),
append(Ruta,[B],X).
cale2( A, C, L),
!,
Lungimea2 = Lungimea+L.
append(Xs,Ys,Zs).
member( X, [X|_]).
member(X,[_|Xs]):-member(X,Xs).
GOAL
readln(A),
readln( B),
Traseu:["edinet","balti","chisinau"]
Exerciţii:
█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀█
█┌───────────────────────────────────────────────┐█
█│ │█
█│ │█
█│ │█
█│ nnnnnnnnnnnnnnnnnN │█
█│ n │█
█│ n │█
█│ n │█
█│ nn │█
█│ │█
█│ │█
█│ │█
█│ │█
█│ │█
█└───────────────────────────────────────────────┘█
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀
asserta
Sintaxa:
asserta (<fapt>)
Caracteristici:
Limbajul Prolog
assertz
Sintaxa:
assertz (<fapt>)
Caracteristici:
assert
Sintaxa:
assert (<fapt>)
Caracteristici:
retract
Sintaxa:
retract (<fapt>)
Caracteristici:
Limbajul Prolog
retractall
Sintaxa:
retractall (<fapt>)
Caracteristici:
consult
Sintaxa:
consult (<nume_fisier>)
Caracteristici:
Salvarea datelor
save
Sintaxa:
save (<nume_fisier>)
Limbajul Prolog
Caracteristici:
Exemplu
DATABASE
dict(String,String)
menu:-
write(„1. Dictionar”),nl,
write(„3. Iesire”),nl,
write(„===================”),nl,
readint(X),
func(X),
menu.
Limbajul Prolog
menu:-menu.
func(1):-
readln(Eng),
dict(Eng,Rom),
func(2):-
readln(Eng),
readln(Rom),
assert(dict(Eng,Rom)).
func(3):-
save(“baza.dba”).
DATABASE
dict(String,String)
Limbajul Prolog
PREDICATES
menu
func(integer)
CLAUSES
menu:-
write("1. Dictionar"),nl,
write("3. Iesire"),nl,
write("==================="),nl,
readint(X),
func(X),
menu.
menu:-menu.
func(1):-
readln(Eng),
dict(Eng,Rom),
func(2):-
readln(Eng),
readln(Rom),
assert(dict(Eng,Rom)).
func(3):-
save("baza.dba"),
exit.
GOAL
consult("baza.dba"),
menu.
Exerciţii:
Operaţii afişare/citire
Afişarea datelor
write
Formatul:
Prototipul: (i,i,...,i)
Exemplu:
X= "Ion”,
write (“Bine aţi venit domnule(nă) ”,X).
writef
Formatul:
Prototipul: (i,i,...,i)
% simbolul iniţial,
p exactitatea.
Poate conţine:
g real scurt.
Exemplu:
Scrie pe ecran:
Limbajul Prolog
Citirea datelor
readln
Formatul:
readln (Arg)
Prototipul: (o)
Exemplu:
readln(X)
readint(integer)
readchar(char)
readreal(real)
readterm
Limbajul Prolog
Formatul:
Prototipul: (i,i)
Fişiere
file = datafile; f2
openread(datafile, FileName)
openwrite(datafile,FileName)
openmodify(datafile,FileName)
readdevice(datafile)
writedevice(datafile)
closefile(datafile)
eof(datafile)
Limbajul Prolog
Exemplu:
DOMAINS
file = datafile
PREDICATES
read_and_print
read_and_display_a_file
GOAL
read_and_display_a_file.
CLAUSES
read_and_display_a_file:-
readln(FileName),nl,
openread(datafile,FileName),
readdevice(datafile),
read_and_print,
closefile(datafile),nl,
Limbajul Prolog
readchar(_),
exit.
read_and_print:-
not(eof(datafile)),
readln(String),
concat(String,”\13\10”,String2),
write(String2),
writedevice(printer),
write(String2),
flush(printer),
writedevice(screen),
read_and_print.
read_and_print:-
eof(datafile),!.
Exerciţii:
Modulul de
Învăţarea sistemului
extragere a
cunoştinţlor
Baza de cunoştinţe
Interfaţa legată de
explicaţii
Utilizator
Limbajul Prolog
interfaţa cu utilizatorul.
/*****************************************************
Regulile:
6. DACĂ are dinţi ascuţiţi ŞI are gheare ŞI are ochii plasaţi in fata
ATUNCI este carnivor.
9. DACĂ este mamifer ŞI este carnivor ŞI are culoare brună ŞI are pete
închise la culoare ATUNCI este ghepard.
10. DACĂ este mamifer ŞI este carnivor ŞI are culoare brună ŞI are
dungi negre ATUNCI este tigru.
11. DACĂ este copitat ŞI are gatul lung ŞI are picioare lungi ŞI are pete
închise la culoare ATUNCI este girafa.
12. DACĂ este copitat ŞI are dungi negre ATUNCI este zebra.
13. DACĂ este pasare ŞI nu zboară ŞI are gatul lung ŞI are picioare
lungi ŞI este alb cu negru ATUNCI este struţ.
*****************************************************/
DATABASE
stiu(symbol)
nu_stiu(symbol)
PREDICATES
animal(symbol)
este(symbol)
CLAUSES
este(mamifer) :- stiu(are_par).
este(mamifer) :- stiu(da_lapte).
este(pasare) :- stiu(are_pene).
este(pasare) :-
stiu(zboara),
stiu(face_oua).
este(carnivor) :-
stiu(mananca_carne).
este(carnivor) :-
stiu(are_dinti_ascutiti),
stiu(are_gheare),
Limbajul Prolog
stiu(are_ohci_in_fata).
este(copitat) :-
este(mamifer),
stiu(are_copite).
este(copitat) :-
este(mamifer),
stiu(rumaga).
animal(ghepard):-
este(mamifer),
este(carnivor),
stiu(are_culoare_bruna),
stiu(are_pete_inchise).
animal(tigru):-
este(mamifer),
este(carnivor),
stiu(are_culoare_bruna),
stiu(are_raiuri_negre).
animal(girafa):-
este(copitat),
stiu(are_gat_lung),
Limbajul Prolog
stiu(are_piciore_lungi),
stiu(are_pete_inchise).
animal(zebra):-
este(copitat),
stiu(are_raiuri_negre).
animal(strut):-
este(pasare),
nu_stiu(zboara),
stiu(are_gat_lung),
stiu(are_piciore_lungi),
stiu(este_alb_cu_negru).
animal(pinguin):-
este(pasare),
nu_stiu(zboara),
stiu(inoata),
stiu(este_alb_cu_negru).
animal(albatros):-
este(pasare),
stiu(zboara_bine).
GOAL
assert(stiu(„are_culoare_bruna”)),
Limbajul Prolog
assert(stiu(„are_raiuri_negre”)),
assert(stiu(„mananca carne”)),
assert(stiu(„are_par”)).
Exerciţii
ask:- ...,ask.
n) Invertarea listei;
DOMAINS
names=symbol*
Prezumţii:
Se dau urmatoarele: