Programare funct ,ional în CAML [631917]

Programare funct ,ional  în CAML
Gr mescu Gheorghe Florin
Master An ul I
Inginerie Soft w are

Cuprins
1 Abstract 3
2 Programare funct , ional  4
In tro ducere 4
Istoric 4
Caracteristici 5
A v an ta jele program rii funct , ionale 5
3 CAML 7
ML(Meta-Language) 7
Expresii de baz  în CAML 8
Ev aluarea expresiilor 8
V ariabile si funct , ii 9
Liste 11
P olimorsm 11
4 Programare funct , ional  cu tastare static  în CAML 13
Tipuri 14
Tipuri de construct , ii în Caml 15
Programare 3D 16
5 Bibliograe 19
2

1 Abstract
In the follo wing article I presen ted the essen tial information ab out func-
tional programming, esp ecially in the programming language CAML, whic h
is: a m ulti-paradigm, a general-purp ose programming language that is a di-
alect of the ML family .
The rst part of the article includes: some information and denitions, along
with a brief history and main concepts presen t in functional programming.
The second part con tains information ab out Meta-language and CAML prop-
erties, expression ev aluation, primitiv e t yp es, v ariables, functions presen t in
this programming language.
The last part refers to the functional programming b y static t yping b y sp ec-
ifying: t yp es, constructing t yp es, and 3D programming.
3

2 Programare funct ,ional 
Un lim ba j declarativ ideal care sp ecic  doar relat , iile din tre datele s , i rezul-
tatele problemei, f r  a indica mo dul de transformare al datelor p en tru a
satisface aceste relat , ii. [1]
Caracteristicile lim ba jelor funct , ionale:
1. Au un sup ort matematic solid;
2. Au un grad ridicat de abstractizare;
3. Realizeaz  sin teza automata a tipurilor
4. P ot  implemen tate paralel
Probleme:
Este greu de estimat necesarul de resurse (timp, spat , iu);
Este greu de incorp orat (input/output). [2]
In tro ducere
Lim ba jele de programare funct , ional  sun t sp ecial concepute p en tru
a face fat ,   calculului sim b olic s , i aplicat , iilor de pro cesare al listelor. Pro-
gramarea funct , ional  se bazeaz  p e funct , ii matematice. Unele din tre cele
mai p opulare lim ba je de programare funct , ional  sun t: Lisp, Python, Erlang,
Hask ell, Clo jure, etc. [3]
Lim ba jele de programare funct , ional  sun t clasicate în dou  grupuri:
Lim ba je funct , ionale pure (Pure F unctional Languages) – A ceste tipuri de
lim ba je funct , ionale accept  n umai paradigmele funct , ionale. De exemplu –
Hask ell.
Lim ba je funct , ionale impure (Impure F unctional Languages) – A ceste tipuri
de lim ba je sprijin  paradigmele funct , ionale s , i programarea imp erativ   a stilu-
lui, de exemplu – LISP .
4

Istoric
Calculul Lam b da ofer  un cadru teoretic p en tru descrierea funct , iilor s , i
ev aluarea lor. Se aseaman  mai m ult cu o abstractizare matematic  decât cu
un lim ba j de programare. O form ul  teoretic  ec hiv alen t  este logica com bi-
natorie, aceasta este p erceput  ca ind mai abstract  decât calculul lam b da.
Logica com binatoric  s , i calculul lam b da au fost init , ial dezv oltate p en tru a
realiza o ab ordare mai clar  a funct , iilor matematice. [4]
Logica com binatoric  este o baz  teoretic  ec hiv alen t , dezv oltat  de
Moses Sc hönnk el s , i Hask ell Curry , aceast  logica a fost dezv oltat  înain-
tea mo delului Lamda s , i este p erceput  ca ind mai abstract .
Caracteristici
Caracteristicile Lim ba jele de programare funct , ional 
1) Lim ba jele de programare funct , ional  sun t concepute p e conceptul de
funct , ii matematice care folosesc expresii condit , ionate s , i recursiv e p en tru a
efectua calcule.
2) Programarea funct , ional  sup ort  funct , ii de ordin sup erior.
3) Lim ba jele de programare funct , ional  n u accept  uxul de con troale,
cum ar : instruct , iunile de tip "bucl " s , i instruct , iunile condit , ionale( If-Else
s , i Switc h). A cestea folosesc direct funct , iile s , i ap elurile funct , ionale.
4) Ca s , i programarea orien tata obiect, lim ba jele de programare funct , ionale
accept  concepte p opulare, cum ar  abstractizarea, încapsularea, mos , tenirea
s , i p olimorsm ul.
5

A v an ta jele program rii funct ,ionale
Programarea funct , ional  ofer  urm toarele a v an ta je:
Programarea paralel  ecien t  – Lim ba jele de programare funct , ional  n u
au starea m utabil , deci n u exist  probleme de sc him bare de stare. F unct , iile
p ot  programate s  funct , ioneze paralel ca si instruct , iunile. A cest lucru spri-
jinind reutilizarea s , i testabilitatea us , oar . [5]
Ecient ,   – Programele funct , ionale sun t alcatuite din: unit t , i indep en-
den te care p ot rula sim ultan. Ca urmare, astfel de programe sun t mai e-
cien te.
Sup ortabilitatea funct , iilor niv elate – Sun t sup ortate functiile Nested.
Sup orta ev aluare "lazy" – Sun t sup ortate ev aluari Lazy (o strategie de
ev aluare care în târzie ev aluarea unei expresii pân  când v aloarea acesteia
este necesar ) cum ar : Lazy Lists s , i Lazy Maps. [6]
6

3 CAML
Caml (Categorical abstract mac hine language) este un lim ba j de pro-
gramare m ulti-paradigm  s , i un dialect al familiei de lim bi de programare
ML.
Ca m ult , i descendent , i ai ML-ului, Caml este tip rit static, strict ev aluat s , i
utilizeaz  gestionarea automat  a memoriei.
Caml este un lim ba j de programare cu scop general, abil s , i sigur. Este
foarte expresiv, dar us , or de în v  t , at s , i de utilizat. Caml sprijin  programarea
funct , ional , imp erativ   s , i orien tat  p e obiect. A cesta a fost dezv oltat s , i dis-
tribuit de INRIA, o cercetare francez  în informatic  s , i matematic  aplicat ,
din 1985. [7]
Sistem ul OCaml este implemen tarea principal  a lim ba jului Caml. A cesta
dispune de un sistem puternic de mo dule s , i de un strat complet orien tat spre
obiect. Vine cu un compilator de co d nativ care sup ort  n umeroase arhitec-
turi, p en tru p erformant ,   ridicat ; un compilator b yteco de, p en tru o p orta-
bilitate sp orit ; s , i o bucl  in teractiv  , p en tru exp erimen tare s , i dezv oltare
rapid .
Sistem ul Caml Ligh t este o implemen tare us , oar  s , i p ortabil  a n ucleului
lim ba jului Caml. Datorit  st rii sale stabile, aceasta este folosit  în general
în educat , ie. [7]
ML(Meta-Language)
M L este un lim ba j funct , ional, ceea ce înseamn  c  folosind acest lim ba j
funct , iile sun t tratate ca v alori de prima clas  F unct , iile p ot  im bricate, p ot 
transmise ca argumen te la altor funct , ii, p ot  sto cate în structurile de date.
Exemple de asignare care mo dic  p ermanen t v aloarea an umitor expresii
sun t p ermise, dar se utilizeaz  m ult mai put , in frecv en t decât în lim ba jele C
sau Ja v a.
Sistemele tip ML sun t p olimorce, ceea ce înseamn  c  este p osibil 
scrierea de programe care funct , ioneaz  p en tru v alori de orice tip, de ex-
emplu: structuri de date: listele, stiv e s , i arb ori ce p ot cont , ine elemen te de
7

orice tip. [8]
Expresii de baz  în CAML
OCaml este un lim ba j puternic tipizat: ecare expresie trebuie s  aib 
un tip, acestea n u p ot  folosite ca expresii în tr-un alt tip.
Tipurile de baz  sun t: unit, in t, c har, oat, b o ol s , i string.
Unit reprezin t  tipul unitate s , i cel mai simplu tip din OCaml, cont , ine
un singur elemen t: ()
In t este tipul de n umere în tregi:. … -1, 0, 1,… Precizia este nit. P e o
arhitectur  bazat  p e 32 de bit , i, precizia este de 31 bit , i (un bit este rezerv at
p en tru utilizarea de c tre run time). P e o arhitectur  p e 64 de bit , i, precizia
este de 63 bit , i, prim ul ind folosit p en tru acelas , i scop ca s , i în cazul arhitec-
turii p e 32 de bit , i. [9]
Float este timpul n umerelor în tregi, n umere cu oricâte zecimale sau n u-
mere cu un exp onen t în baza 10, notat cu E. Example: 0,5; 3,51; 2e18.
Char tipul de caractere ce implemen teaza caractere din setul de caractere
ASCI I. A cestea se declar  în tre ghilimele, exemplu: 'A', 'Z', '120', ' t', ' r', '
n'
Bolean . Exist  doar dou  v alori b o oleene: adev  rat s , i fals. Fiecare
relat , ie returneaz  o v aloare b o olean . Negarea logic  este efectuat  de funct , ia
nefunct , ional . [10]
String . Spre deosebire de s , irurile de caractere din C, aici acestea n u sun t
v ectori de caractere s , i n u folosesc ' 000' ca s , i caracter terminal. Exemplu:
"Pro ject","Caml".
8

Ev aluarea expresiilor
Un program Caml este o secv ent ,   de expresii, delimitate prin ";;" s , i
ev aluate în ordine, conform aparit , iei lor în secv ent ,  , ecare expresie ind
ev aluat  o singur  dat . [8]
Pro cesul de ev aluare a expresiilor Caml p oate  privit ca un pro ces
de transform ri succesiv e (rescrieri) ale expresiilor.
Etap ele acestor transform ri sun t:
1. P arsarea;
2. Sin teza tipurilor;
3. Compilarea;
4. Înc rcarea;
5. Execut , ia;
6. As , area rezultatelor execut , iei;
Observ at , ii:
V ersiunea original  de Caml ev aluaz  funct , iile înain tea argumen telor (left-
to-righ t ev aluation), p e când Caml Ligh t ev alueaz  argumen tele înain tea
funct , iilor (righ t-to-left ev aluation).
Caml foloses , te ap elul prin v aloare (call-b y-v alue).
V ariabile si funct ,ii
V ariabile
În ML, v ariabilele sun t n ume p en tru v alori. În tr-un cadru pur funct , ional,
n u este p osibil s  se spun  diferent , a din tre o v ariabil  s , i v aloarea p e care
o reprezin t . Leg turile din tre v aloare si v ariabile sun t in tro duse folosind
cuv ân tul c heie Let . Sin taxa declarat , iei este: let name = expr. [11]
De exemplu, urm torul co d denes , te dou  v ariabile a s , i b s , i le adun 
împreun  p en tru a obt , ine o v aloare p en tru c.
9

# let a = 1;;
v al a : in t = 1
# let b = 2;;
v al b : in t = 2
# let c = a + b;;
v al c : in t = 3
Denit , iile ce folosesc let p ot , de asemenea, im bricate folosind "in", ex-
emplu: let name = expr1 in expr2
Expresia expr2 este n umit  corpul lui let, expr1 este n umele v ariabilei
denite ca v aloarea în in teriorul corpului. Dac  exist  o singur  denit , ie
n ume, n umele v ariabilei este denit n umai în corpul expr2 s , i n u în expr1
(sau oriunde altundev a).
# let x = 1 in
# let y = 2 in
# x + y;;
– : in t = 3
F unt , iile
F unct , iile sun t denite folosind cuv ân tul c heie fun , acesta este urmat de:
o secv ent ,   de v ariabile ce denesc argumen tele, separatorul -> s , i ap oi corpul
funct , iei. [12]
În mo d implicit, funct , iile n u sun t den umite, acestea se den umesc folosind
cuv an tul c heie let .
# let incr = fun i -> i + 1;;
# v al incr : in t -> in t = <fun>
P aran tezele sun t necesare p en tru argumen te care n u sun t expresii simple.
# incr 2;;
– : in t = 3
# incr 2 * 3;;
– : in t = 9
# incr (2 * 3);;
– : in t = 7
10

F unct , iile p ot  denite cu mai m ulti argument , i. De exemplu, o funct , ia
care calculeaz  suma a dou  n umere în tregi p oate  denit  dup  cum
urmeaz :
# let sum = fun i j -> i + j;;
# v al sum : in t -> in t -> in t = <fun>
# sum 5 11;;
– : in t = 16
Liste
Listele sun t de asemenea utilizate în programele OCaml. O list  cont , ine
o secv ent ,   de v alori de acelas , i tip. Exist  doi constructori: expresia [] ce de-
neste o list  goal  s , i expresia e1 :: e2 ce deneste expresia expresiei e1 p e
lista e2. [12]
# let list = "Pro ject" :: "Caml" :: [];;
– v al list : string list = ["Pro ject"; "Caml"]
Sin taxa [e1; . . . ; en] este o sin tax  alternativ   p en tru lista care cont , ine
v alorile construite din elemen tele e1,. . . , en. O list  in t este o list 
care cont , ine doar n umere în tregi, o list  de s , ir este o list  care cont , ine doar
s , iruri, iar o list  "a" este o list  care cont , ine elemen te de tip "a" (dar toate
elemen tele trebuie s  aib  acelas , i tip).
P olimorsm
Meta-Language furnizeaz  p olimorsm parametric, tipurile p ot  parametrizate
dup  v ariabilele de tip. De exemplu, funct , ia de iden titate din ML p oate 
exprimat  prin tr-o singur  funct , ie.
# let iden tit y x = x;;
# v al iden tit y : 'a -> 'a = <fun>
# iden tit y 1;;
11

– : in t = 1
# iden tit y "Message";;
– : string = "Message"
V ariabilele de tip sun t iden ticatori cu litere mici, precedate de o singur 
ghilimea ('). Iden titatea : 'a ->' a spune c  funct , ia are un argumen t de
tip arbitrar "a" s , i returneaz  o v aloare de acelas , i tip "a". Dac  se aplic 
funct , ia de iden titate la un in t, atunci returneaz  un in t; dac  este aplicat 
un ui s , ir, atunci ea returneaz  un ³ir. F unct , ia de iden titate p oate  aplicat 
s , i în argumen tele funct , iei [13]
12

4 Programare funct ,ional  cu tastare static  în
CAML
În op ozit , ie cu Sc hema s , i LISP , p e baza tratamen tului laten t al tipurilor,
exist  programe, lim ba je de programare funct , ionale unde sistem ul este de tip
elab orat s , i solid. În aceste lim ba je, logica din spate este sust , in ut  de tipul
Lam b da.
Asemenea lim ba je sun t tip rite static (adic  v ericarea se face in timpul
compil rii). Mai m ult decât atât, pro cesarea datelor corecte este impus  prin
regulile un ui sistem de tip matematic bine fondat. [14]
Prin tr-un sistem de tip, înt , elegem un set de reguli s , i mecanisme folosite
în tr-un lim ba j de programare, menite s  organizeze, s  construiasc  s , i s  op-
ereze tipurile acceptate în lim ba jul resp ectiv  .
A ceste mecanisme s , i regulile se refer  la urm toarele asp ecte ma jore:
 Denirea de noi tipuri.
 Aso cierea tipurilor cu diferite construct , ii de lim bi.
 Decizia privind ec hiv alent , a de tip, reprezin t  capacitatea de a determina
când sun t diferite aceleas , i tipuri.
 V ericarea compatibilit t , ii tipului, adic  a aa dac  o v aloare al un ui an-
umit tip p oate  folosit  corect în tr-un an umit con text de pro cesare.
 Inferierea tipurilor de construct , ii de lim ba j atunci când n u sun t explicit
declarate.
Ca s , i în Sc hem , elemen tul de baz  al lim ba jului este funct , ia, considerat 
ca o v aloare de prim  clas . O funct , ie "1-ary" este reprezen tat  ca:
fun formal -> expression
Caml este un domeniu complet static ce pro duce o înc hidere funct , ional .
Cu toate acestea, Caml este un lim ba jul ce prezin t  v ariabilele de niv el sup e-
rior ce au o sfer  static : partea din program, dup  punctul lor de denire.
A cest lucru a jut  la resp ectarea transparent , ei de referint ,  , în cazul efectelor
secundare, daca n u sun t abuzate.
13

Expresiile sp eciale de niv el sup erior:
let v ariable = expression;;
let rec v ariable = expression;;
Expresiile leag  v ariabila de v aloarea expresiei. Domeniul sau regiunea
v ariabilei este partea din program care urmeaz  termen ul de exprimare, re-
sp ectiv, partea din program care urmeaz  expresia rec, incluzând-o s , i p e
aceasta.
De exemplu, expresia de mai jos leag  v ariabila sum  la o înc hidere funct , ional 
(o funct , ie curried). [15]
let sum  = fun 1 -> fun 2 -> 1 + 2;;
sum : in t -> in t = <fun>
Observ at , e, o expresie pro duce dou  v alori: v aloarea expresiei s , i tipul aces-
teia.
De exemplu, v aloarea plus este o funct , ie desemnat  de <fun>, cu domeniul:
in t s , i in terv alul in t -> in t, adic  semn tura corespunz toare funct , iilor a c ror
domeniu s , i in terv al sun t de tipul în treg. Tipul unei expresii n u trebuie sp ec-
icat în mo d explicit; se deduce p e baza tipurilor comp onen telor sale.
Let si Let rec sun t expresii de denire a domeniului:
let v ar1 = expr1
v ar2 = expr2

v arn = exprn
Domeniul de aplicare al v ariat , iei i = 1,n este expresia expr . Expresiile
expri sun t ev aluate în tr-o ordine nesp ecicat . V ariabila v ari este legat  de
rezultatul ev alu rii expri s , i ap oi expr este ev aluat . Rezultatul expr este
rezultatul expresiei let de mai sus. Expresia este una similar  cu expresia
let cu diferent , a c  domeniul v ariat , iei este în treaga expresie let rec . Cu alte
cuvin te, expresiile expri p ot referi v ariabilele v ari . [16]
14

Tipuri
Caml este tip rit static. Tipurile sun t aso ciate atât v ariabilelor cât s , i v alorilor
s , i sun t v ericat p en tru consistent ,   în timpul compil rii. Mai m ult, tastarea
expresiilor s , i a v ariabilelor p ot  efectuate automat, f r  nicio declarat , ie ex-
plicit  de tip. [17]
Ca abstract , ie algebric , un tip este triple T = <V, Op, Ax> unde V este
setul de v alori de tip, Op este setul de op eratori de tip (inclusiv semn turile
op eratorilor), iar Ax este un set de axiome care descriu comp ortamen tul
op eratorilor. A cest  denit , ie fa v orizeaz  p ersp ectiv a constructiv   a v alorilor
tipului.
Tipuri de construct ,ii în Caml
Fiecare lim ba j de programare vine cu un set de tipuri predenite s , i
tipuri care p ot  construite de c tre utilizator. [18] Putem nota acest univ ers
de tipuri: MT s , i consider m c  este un tip de meta-tip ale c ror v alori sun t
tipuri. În plus, o lim b  ofer  constructorilor de tip, o funct , ie de forma c:
MT n! MT, n 0. În cazul lui Caml, constructorii de tip 0 (tipuri predef-
inite) sun t: in t (tipul în treg), b o ol (tipul b o olean), oat (tipul cu virgul 
mobil ) c har (tipul de caractere), s , ir (tipul de s , ir), unitate (tipul gol) s , i exn
(tip except , ional). [19]
Op eratorii sun t la fel ca în ma joritatea lim ba jelor de programare. Except , ia
este tipul: b o ol, unde constan tele sun t: fals s , i adev  rat, iar op eratorii sun t:
& (the b o olean and), or, and not. Ca s , i în cazul un ui tip con v ent , ional, putem
deni v ariabile p este MT. O astfel de v ariabil  de tip p oate  legat  la o v al-
oare din MT, adic  la un tip. În Caml, v ariabilele de tip sun t reprezen tate
ca: iden ticatori.
F olosind constructori de tip din MT (tipuri predenite) putem construi
expresii de tip care v or reprezen ta noi tipuri din MT. [19] De exemplu, Caml
ofer  urmatorii constructori de tip:
 MT n! MT Expresia de tip 1 * 2 * … * n, i2 MT, construies , te
tipul corespunz tor al pro dusului cartezian 1 2 … n. Se prezin t 
o constan t  de tip 1 * 2 * … * n ca triplet: (a1, a2, …, an), ai: i.
15

P en tru tipurile particulare: 1 * 2 , exist  doi op eratori predenit , i: fst
(a1, a2) = a1 s , i snd (a1, a2) = a2.
list : MT! MT Tipul expresiei list, 2 MT, construies , te tipul core-
spunz tor listei cu elemen te de tip . O constan t  a listei de tip este
reprezen tat  ca [a1; a2; …; an]; ai: .
O categorie in teresan t  de constructori de tip este cea care construies , te
tipuri de sume. A ces , ti constructori n u sun t predenit , i s , i trebuie denit , i ex-
plicit folosind expresia:
t yp e id = ncon1 | ncon2 | . . . | nconm |
con1 of 1 | con2 of 2 | . . . | conn of n
Expresia construies , te un constructor de sum  n umit id al c rui v alori
sim b olice sun t e: nconj , e coni (ai), ai: i. Aici nconj s , i coni sun t iden ti-
catori care joac  rolul un ui constructor de v alorilor de tip id: adic  nconj:
! id s , i coni: i! id .
Constructorii de tip sum  p ot  parametrizat , i. [20] Suma constructorului
de sum  1 a liste: nested_list de mai jos descrie o list  care p oate cont , ine
v alori de tip generic s , i, în mo d recursiv, liste de acelas , i tip:
t yp e 'a nested_list = atom of 'a
| branc h of 'a nested_list ;;
Deoarece este un constructor de tip, nested_list p oate  aplicat p e un
tip p en tru a obt , ine un tip sp ecic de lista. De exemplu, in t nested_list
este tipul ce con tine o lista de n umere în tregi.
16

Programare 3D
Spre deosebire de Sc hem  unde programarea este 2D, o dimensiune
corespunde logicii program, iar cealalt  dimensiune este timpul de ev aluare
al expresiilor program ului. Caml, prezin t  p osibilitatea program rii 3D, prin
adaugarea unei dimensiuni noi, reprezen tat  prin: tipurie de expresii. Când
construim programe, trebuie s  ne asiguram c  tipurile de expresii p e care le
scriem corespund cu ceea ce ne gândim. Luarea în considerare a semnicat , iei
expresiilor este crucial  în programare in Caml [21] .
De exemplu, luarea în considerare asupra redenirii mecanism ului uxu-
lui as , a cum este implemen tat, în prim ul rând trebuie s  denim uxul de tip
al elemen telor de tip generic "a (v ariabil  de tip).
t yp e 'a stream = nil | term of 'a * (unit -> 'a stream);;
V aloarea sim b olic  a lui nil reprezin ta uxul gol. T ermen ul de v aloare
sim b olic  (t, funct , ie) reprezin t  un termen al un ui ux ce n u este gol: t este
v aloarea termen ului, funct , ia este de înc hidere, capabil  s  genereze urm –
torul termen al uxului. [23]
Exemple de op eratori de ux:
 (cons t f ) – construies , te termen ul de ux (t, f ).
 hds(term(t,f )) – revine la prima v aloare a uxului
 tls(term(t,f )) – returneaz  termen ul de ux generat de aplicat , ia f ().
t yp e 'a stream = nil | term of 'a * (unit -> 'a stream);;
exception StreamError of string;;
let cons x f = term(x,f )
and hds = fun nil -> raise(StreamError "hds on nil")
 | (term(x, _ )) -> x
and tls = fun nil -> raise(StreamError "tls on nil")
 | (term( _ ,f )) -> f();;
cons: 'a -> (unit -> 'a stream) -> 'a stream = <fun>
hds: 'a stream -> 'a = <fun>
tls: 'a stream -> 'a stream = <fun>
17

Exemplu: Construirea uxului temenilor lui  :
 = 4 – 4/3 + 4/5 – 4/7 + 4/9 – 4/11 +. . .
18

5 Bibliograe
[1] P aul Hudak Y ale Univ ersit y , Septem b er 1989. "Conception, ev olution,
and application of functional programming languages"
[2][3] Minsky , Y aron; W eeks, Stephen (July 2008). "Caml T rading  ex-
p eriences with functional programming on W all Street"
[4][5] Lero y , Xa vier "Some uses of Caml in Industry", CUFP 2007
[6] h ttp://www.n uprl.org/do cumen ts/Hic k ey/02caltec h-o caml.p df.
[7] The F unctional Approac h to Programming with Caml b y Guy Cousineau
and Mic hel Maun y . F renc h 1995
[8] Strein u -" Lisp – Lim ba jul de programare al in teligen tei articiale" , Ed.
St. si Enc., Bucuresti, 1986
[9][10] Cardelli, Luca (1984). "Compiling a functional" language
[11][12] "In tro duction to the Ob jectiv e Caml Programming Language" ,
Jason Hic k ey ,F ebruary 10, 2003".
[13]https://en.wikipedia.org/wiki/Functional_programming
[14]https://en.wikipedia.org/wiki/Caml
[15]http://labs.cs.upt.ro/labs/cflp/html/cflp10.php#let
[16][17]https://profs.info.uaic.ro/~ibanescu/pf/lab1.html
[18]http://andrei.clubcisco.ro/cursuri/2pp/07.Caml.pdf
[19]https://caml.inria.fr/pub/docs/oreilly-book/ocaml-ora-book.pdf
[20]http://atm.neuro.pub.ro/radu_d/html/09_10/IAM_TAPSM/Paradigme%20de%20Programare_v1.pdf
[21]https://msdn.microsoft.com/en-us/library/dd588092(v=office.11).aspx
19

[22] Y aron Minsky (1 No v em b er 2011). "OCaml for the Masses".
[23] Ritzer George. 1991. "Metatheorizing in So ciology", Published b y:
Springer.
20

Similar Posts