You are on page 1of 10

LUCRARE DE LABORATOR Nr.

 Mediul de programare Turbo Prolog. Meniul principal,Ferestrele Turbo


Prologului, Lansarea/trasarea programului.

 Clauze Turbo Prolog. Fapte, Reguli, Variabile, Constante, Scopuri, Apel la un


predicat. Structura programelor Turbo Prolog

Mediul TURBO PROLOG


Mediul TURBO PROLOG este asemănător celorlalte medii Borland, fiind asistată de
o interfaţă prietenoasă, prin meniuri.

Componentele de bază ale sistemului sunt:


PROLOG.EXE – mediul şi compilatorul PROLOG;
PROLOG.LIB – biblioteca PROLOG;
INIT.OBJ – un modul de iniţializare, necesar la orice linkeditare;
PROLOG.HLP – fişier de helpuri- uri;
PROLOG.ERR – mesaje de erori;
PROLOG.OVL – over-ul compilatorului;
în afară de aceste componente fiind utilizate componentele Borland:
TLINK.EXE – editor de legaturi;
TLIB.EXE – bibliotecarul borland;
BGI – interfaţa grafică borland.
Lansarea sistemului se face prin lansarea fisierului PROLOG.EXE. Mediul afisează
primul ecran:
█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
█┌────────────────────────────────────────────────────────────┐█
█│ Files Edit Run Compile Options Setup │█
█└────────────────────────────────────────────────────────────┘█
█ █
█ █
█ █
█ ┌──────────────────────────────┐ █
█ │ │ █
█ │ TURBO PROLOG 2.0 │ █
█ │ │ █
█ │ Copyright (c) 1986,1988 by │ █
█ │ Borland International, Inc │ █
█ │ │ █
█ └──────────────────────────────┘ █
█ █
█ █
█F2-Save F3-Load F6-Switch F9-Compile Alt-X-Exit█
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
apoi se tastează <Enter> şi va apare un meniu principal şi patru ferestre de lucru:
█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
█┌────────────────────────────────────────────────────────────┐█
█│ Files Edit Run Compile Options Setup │█
█└────────────────────────────────────────────────────────────┘█
█┌──────────────── Editor ────────────────┐ ┌───── Dialog ────┐█
█│ │ │ │█
█│ │ │ │█
█│ │ │ │█
█│ │ │ │█
█│ │ │ │█
█│ │ │ │█
█│ │ │ │█
█│ │ │ │█
█└────────────────────────────────────────┘ └─────────────────┘█
█┌──────────── Message ────────────┐ ┌───────── Trace ────────┐█
█│ │ │ │█
█│ │ │ │█
█└─────────────────────────────────┘ └────────────────────────┘█
█F2-Save F3-Load F6-Switch F9-Compile Alt-X-Exit█
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Meniul principal consta din submeniurile:
┌────────────────────────────────────────────────────────────┐
│ Files Edit Run Compile Options Setup │
└────────────────────────────────────────────────────────────┘
Pentru a folosi meniul principal, din orice loc a Prologului apăsaţi <Esc>, sau apasând
ALT+litera aprinsă selectaţi unul din submeniuri. Meniurile Edit şi Run nu sunt
pull-down, ele servind doar la editare, respectiv execuţie.

1
 Files - Se referă la gestiunea fisierelor. Load (F3) – încarcă un fisier. Pick –
deschide un fişier încărcat in sesiunea curentă. New File –creează un fişier nou cu
numele work.pro. Save (F2) – salvarea fişierului. Write to – modificarea numelui
unui fişier. Directory – afisarea directoariului curent. Change Dir – maniularea
directoarelor. OS-Shell - ieşirea temporară din TURBO PROLOG (revenirea cu
comanda Exit). Quit – ieşirea totală în sistemul de operare.
 Compile – Acest meniu lasă posibilitatea alegerii modului în care să se facă
compilarea.
 Options – Acest meniu produce mai multe submeniuri pull-down, în care putem
specifica opţiuni de compilare.
 Setup – Permite setarea mediului de programare TURBO PROLOG . Puteţi
configura lungimile, culorile ferestrelor TURBO PROLOG , setarea directoarelor,
modificarea configurarii tastaturii etc.

Mediul de programare TURBO PROLOG pune la dispozitie utilizatorlor patru


ferestre. Acestea sunt:
 The edit Window(Fereastra de editare): este cea în care încărcaţi sau editaţi
programele. Pentru a fi rulat sau compilat, textul sursă al programului trebuie să
fie introdus în fereastra Edit. Pentru a intra n această fereastră, apăsaţi Alt+e sau
alegeţi Edit din meniul bară principal;
 The Dialog Window (Fereastra de dialog): este fereastra implicată a intrărilor şi
ieşirilor din program.
 The message Window (Fereastra mesajelor): este o ferestră a ieşirilor produse
de sistem. Se referă la comenzile de compilare, rulare, încărcare, salvare, mesaje
de eroare etc.
 The Trace Window (Fereastra de depanare): este folosită numai la depanarea
(pas cu pas) a programelor. Pentru a activa această ferestră, avem două
posibilităţi:
- setăm în meniul Options, submeniul Compiler directives, opţiunea Trace, una
din posibilităţile Trace sau ShortTrace (Trace, faţă de ShortTrace, inseamnă
depanare completă). Dacă nu se doreşte depanarea programelor TURBO
PROLOG, se selectează Off.
- adăugăm la începutul programului predicatul trace sau shorttrace.

Cheile funcţionale
Block functions

2
Copy block Ctrl-F5 Hot keys
Copy block again Shift-F5
Copy block to printer Alt-F8 Run program Alt-R
Copy block to file Alt-F5 Activate Editor Alt-E
Copy block from file F7 Activate Files pulldown Alt-F
Move Block Alt-F6 Activate operating system Alt-D
Delete Block Alt-F7 Activate Options pulldown Alt-O
Undo delete block Ctrl-F7 Activate Compile pulldown Alt-C
Change case for a block Ctrl-F6 Activate Setup pulldown Alt-S
Search Ctrl-F3 Display Hot keys Alt-H
Search again Shift-F3 Display version info Alt-10
Replace F4 Load file F3
Replace again Shift-F4 Pick file Alt-F3
Save file F2
Miscellaneous Compile to memory F9
Compile to OBJ Shift-F9
Aux edit F8 Compile to EXE Ctrl-F
Popup help menu F1 Compile Project Alt-F9
Show help file Shift-F1 Quit Prolog Alt-X
Auto indentationAlt-I Ctrl-Q Ctrl-I
Insert mode Ins Ctrl-V
Text mode Ctrl-Q Ctrl-W Wordstar-like
Lower case word Ctrl-B Ctrl-L
Upper case word Ctrl-B Ctrl-U Set block start Ctrl-K Ctrl-B
Reverse case word Ctrl-B Ctrl-R Set block end Ctrl-K Ctrl-K
Exit editor F10 Ctrl-K Hide/Show end Ctrl-K Ctrl-H
Ctrl-D Copy block Ctrl-K Ctrl-C
Move block Ctrl-K Ctrl-V
Global functions Delete block Ctrl-K Ctrl-Y
Change case for a blockCtrl-K Ctrl-E
Resize window Shift-F10 Copy block to printer Ctrl-K Ctrl-P
Zoom window F5 Copy block to file Ctrl-K Ctrl-W
View windows F6 Copy block from file Ctrl-K Ctrl-R
File mask F4 Search Ctrl-Q Ctrl-F
Previous line F8 Search again Ctrl-O
Call editor in GOAL mode Ctrl-E Replace Ctrl-Q Ctrl-A
Terminate input F10 Replace again Ctrl-L

Clauze TURBO PROLOG

FAPTE, REGULI, SCOPURI

Un program TURBO PROLOG este o mulţime de clauze Turbo Prolog. Acestea sunt
de trei tipuri: fapte, reguli si scopuri.

Fapte TURBO PROLOG

Un fapt precizează “o proprietate a unui obiect sau exprimă o relaţie dintre mai multe
obiecte”. Forma sintactică generală prin care pot fi descrise faptele este:

relaţie ( obiect1, obiect2, …, obiect n ).

Sfirşitul unui fapt se identifică prin apariţia simbolului ‘ . ’ .

EXEMPLU 1:
Bill este parintele lui Bob.

unde Bill şi Bob sunt obiecte, dar parintele este relaţia. În prolog aceasta poate fi
prezentată în modul urmator:
parinte (Bill, Bob).

O informaţie mai compusă se poate descrie cu o mulţime de fapte:

3
pam tom
parinte ( pam , bob ).
parinte ( tom , bob ).
bob liz parinte ( tom , liz ).
parinte ( bob , ann ).
parinte ( bob , pat ).
ann pat parinte ( pat , jim ).

Jim

EXEMPLU 2:

Elenei îi place tenis. place ( elena , tenis ).


Mariei îi place inotul şi voleiul. place (maria , inot ).
place (maria , volei ).
În Paris este situat Turnul Eiffel. situat (paris , turnul_eiffel).
Reguli TURBO PROLOG

O regula TURBO PROLOG exprimă “o relaţie de dependenţă între fapte” şi pemite


descrierea unor informaţii noi în baza celor deja cunoscute.
Forma sintactică generală este:
Capul_regulii if Corpul_regulii.

unde Capul regulii poate fi:


relaţie (obiect1, obiect2,…,obiect n )
iar Corpul regulii poate fi:
relaţie1(obiect1,1 ,obiect1,2,…,obiect1, k1) and
:
not(relaţien-m(obiectn-m,1,obiectn-m,2,…,obiectn-m,k n-1)) and
:
relaţien-1(obiectn-1,1,obiectn-1,2,…,obiectn-1,k n-1) and
relaţien(obiectn,1,obiectn,2,…,obiectn,kn).

În capul regulii avem un singur predicat.In corpul regulii pot apare unul sau mai multe
predicate, legate între ele prin conectorul and. Un fapt poate fi privit şi ca o regulă cu
corpul vid.
În TURBO PROLOG urmatoarele simboluri sunt echivalente
if  :-
and  , .
or  ;
EXEMPLU 3:
fapte:
parinte ( pam , bob ).
parinte ( bill , bob ).

femeie (pam).

4
Putem adăuga în acest program o regula care defineşte relaţia mama reeşind din
faptele parinte şi femeie.

mama ( X, Y ) if
parinte ( X, Y) and
femeie (X).
EXEMPLU 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 ):-
auto(X, _ , _ , Viteza , _ , Cutia_de_viteze , _ , _ , _ , _ ),
Viteza > 250,
Cutia_de_viteze = manual.

5
Variabile în TURBO PROLOG.

În TURBO PROLOG numele de variabile trebuie să înceapă cu majusculă sau _


(liniuţa de subliniere), urmate de oricîte litere, cifre sau simbolul ‘_’ care înseamnă
“orice”. Se foloselşte atunci cînd în scrierea unei reguli o variabilă apare o singură
dată (semnificînd practic faptul că valoarea ei nu este folosită).
Variabilele sunt iniţial “nedefinite” (nu au valori, sunt “nelegate”). Legarea la o
“valoare” se face în cursul execuţiei programului, prin unificare. Variabilele din
Prolog sunt variabile logice. Ele sunt asemănătoare necunoscutelor din matematică, în
sensul că atunci cînd sunt libere se presupune că vor lua o valoare dintr-un domeniu,
iar atunci cînd sunt legate la o anumită valoare nu i se mai poate schimba valoarea
decît prin backtracking.
Valoarea variabilei NU se poate modifica prin instrucţiuni de asignare cum ar fi
X:=X+1; sau X:=2*X +Z; ca în limbajele imperative. Din punct de vedere a logicii
instrucţiunea de tip 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 prin o altă variabilă: X2=X+1. Însă două clauze pot folosi acelaşi nume pentru o
variabilă, neexestînd nici un fel de legătură între ele. Transmisia valorilor variabilelor
între clauze se face prin argumentele predicatelor.

EXEMPLU 5:
clauza1:-
X=5,
X2=X*2,
clauza2(X2).

clauza2(X2):-write(“X2=”,X2).

Exemplul 5 arată cum o variabilă poate fi transmisă dintr-o clauză în alta (Se
transmite valoarea variabilei X2 din clauza1 în clauza2).

EXEMPLU 6:
clauza1:-
X=5,
clauza2(X2),
X3 = X + X2,
write (X3).

clauza2(X2):-
X2 = 4.

Exemplul 6 arată cum o variabilă poate fi obţinută dintr-o clauză (Se obţine valoarea
variabilei X2 din clauza2).

Scopuri

Scopurile sunt folosite pentru a chestiona sistemul despre informaţiile pe care le are
referitor la relaţiile şi obiectele declarate.

6
Scopurile pot fi interne sau externe. Un scop intern se va scrie în secţiunea goal.
Unul extern se va scrie în fereastra de dialog, după rularea programului (dacă acesta
nu conţine secţiunea goal).
Forma sintactică generală a unui scop este asemenea ca şi forma corpului unei regule.

EXEMPLU 7: (scop extern)


█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
█┌────────────────────────────────────────────────────────────┐█
█│ Files Edit Run Compile Options Setup │█
█└────────────────────────────────────────────────────────────┘█
█┌──────────────── Editor ────────────────┐ ┌───── Dialog ────┐█
█│Predicates │ │GOAL: │█
█│ parinte (symbol,symbol) │ │ parinte(X,bob). │█
█│Clauses │ │ │█
█│ parinte (bill, bob). │ │X = bill │█
█│ parinte (pam, bob). │ │X = pam │█
█│ │ │2 Solutions │█
█│ │ │ │█
█│ │ │ │█
█└────────────────────────────────────────┘ └─────────────────┘█
█┌──────────── Message ────────────┐ ┌───────── Trace ────────┐█
█│ │ │ │█
█│ │ │ │█
█└─────────────────────────────────┘ └────────────────────────┘█
█F2-Save F3-Load F6-Switch F9-Compile Alt-X-Exit█
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
EXEMPLU 8: (scop intern)
█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
█┌────────────────────────────────────────────────────────────┐█
█│ Files Edit Run Compile Options Setup │█
█└────────────────────────────────────────────────────────────┘█
█┌──────────────── Editor ────────────────┐ ┌───── Dialog ────┐█
█│Predicates │ │bill │█
█│ parinte (symbol,symbol) │ │Press the SPACE b│█
█│Clauses │ │ar │█
█│ parinte (bill, bob). │ │ │█
█│ parinte (pam, bob). │ │ │█
█│Goal │ │ │█
█│ parinte(X,bob), │ │ │█
█│ write(X). │ │ │█
█└────────────────────────────────────────┘ └─────────────────┘█
█┌──────────── Message ────────────┐ ┌───────── Trace ────────┐█
█│ │ │ │█
█│ │ │ │█
█└─────────────────────────────────┘ └────────────────────────┘█
█F2-Save F3-Load F6-Switch F9-Compile Alt-X-Exit█
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Secţiunile unui program Prolog

/*===============Comentariu=================*/
% Comentariu
DOMAINS
<descrierea domeniilor>
DATABASE
<declararea predicatelor de baza de date dinamica>
CONSTANTS
<declararea constantelor>
PREDICATES
<declararea predicatelor>
CLAUSES
<afirmatiile>

7
GOAL
<afirmatiile de scop>
Sarcine

1. De elaborat un program în limbajul PROLOG ce simuleaza un vocabular (român-


englez, englez-român, francez-român, etc... )

De consultat programul cu intrebari de tipul:


 p(cuvînt_concret, cuvînt_concret) - răspus corect
 p(cuvînt_concret, cuvînt_concret) - răspuns incorect
 p(X, cuvînt_concret) - valoarea X
 p(cuvînt_concret,Y) - valoarea Y
 p(X,Y) - valorile X,Y

2. De construit un arbore genealog, de elaborat o bază de cunoştinţe, un program în


limbajul PROLOG, care consta din faptele arborelui genealogic, folosind relatiile:
parinte, femeie, barbat.

I. De verificat programul cu intrebari de tipul:


 parinte (nume_concret, nume_concret).
 parinte (nume_concret, X).
 parinte (X,Y).
 femeie (nume_concret).
 femeie (X).

II. De substituit faptele cu relatia barbat cu o regula este_barbat( X ) :- ..., care este
adevarată dacă numele X nu este nume de femeie.

III. De verificat programul cu intrebari de tipul:


 este_barbat(nume_concret) % motivati rezultatul
 este_barbat( X ) % motivati rezultatul

IV. De adaugat in program regule care ar determina urmatoarele relatii:


 X este mama lui Y
 Y este tata lui Y
 X este fratele lui Y
 X este sora lui Y
 X este bunica lui Y
 X este matusa lui Y
 X este neputul lui Y
 X este copilul lui Z
 X are copii
DOMAINS % baza de cunostinte = baza de fapte
nume = SYMBOL
PREDICATES

8
parinte( nume, nume )
CLAUSES
parinte ( pam , bob ).
parinte ( tom , bob ) .
parinte ( tom , liz ).
parinte ( bob , ann ).
parinte ( bob , pat ).
parinte ( pat , jim ).
femeie (pam).
femeie (liz).
femeie (ann).
femeie (pat).
barbat (bob).
barbat (tom).
barbat (jim).

3. De elaborat un program în limbajul PROLOG, care contine o baza de date (fapte)


de automobile la un AUTO-magazin.

I. De verificat programul cu intrebari de tipul:


 care sunt automobilele de culoarea neagra
 care sunt automobilele de anumita marca si serie
 care sunt automobilele cu pretul mai mic ca 3000
 care sunt automobilele de culoarea neagra, cu anul mai mare ca 1995 si cu
pretul mai mic ca 4500
 care sunt automobilele cu volumul motorului intre 2.0 si 3.0 de culoarea
neagra sau rosie.
II. De adaugat o regula care ar determina ce inseamna un automobil sportiv:
sport_car ( Marca, Seria).

II.1. De listat toate automobilele sportive din baza de date.


II.2. De verificat programul cu umatoarele intrebari:
 sport_car(marca_sportiva,seria_sportiva)
 sport_car(marca_ne_sportiva,seria_ne_sportiva)

III. De adaugat in program urmatoarele definitii de tipuri de automobile:


 automobil_de_familie
 automobil_de_prestigiu
 automobil_pentru_dame
 automobil_de_anticariat

DOMAINS % baza de date = baza de fapte


marka,seria,combustibil,cutie_de_viteza, culoarea, accesorii = SYMBOL
anul, viteza_max = INTEGER
volumul_motorului, pretul = REAL
PREDICATES
auto( marka, seria , anul, viteza_max, combustibil,cutie_de_viteza, culoarea ,
volumul_motorului, accesorii, pretul)
CLAUSES
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).

9
Bibliografie:
1. C. Masalagiu, L. Ibănescu, Ş.Andrei – Practica programarii în TURBO PROLOG, IAŞI, 1998
2. J. Meszaros – TURBO PROLOG 2.0 ghid de utilizare, Cluj-Napoca 1996
3. S.Pelin, I.Orlovski – Bazele programării în limbajul Prolog, Chişinău, 2002

10

You might also like