paradigme de programare - erasmus pulseracket vs. scheme cum se numes, te limbajul despre care...

35
Paradigme de Programare Conf. dr. ing. Andrei Olaru [email protected] | [email protected] Departamentul de Calculatoare 2019 Introducere Tipare Variabile Evaluare Recursivitate · ······························· Paradigme de Programare – Andrei Olaru 2 : 1 / 33

Upload: others

Post on 03-Jan-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Paradigme de Programare

Conf. dr. ing. Andrei Olaru

[email protected] | [email protected] de Calculatoare

2019

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 1 / 33

Page 2: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Cursul 2

Programare funct,ionala în Racket

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 2 / 33

Page 3: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Cursul 2: Programare funct,ionala în Racket

1 Introducere

2 Discut,ie despre tipare

3 Legarea variabilelor

4 Evaluare

5 Construct,ia programelor prin recursivitate

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 3 / 33

Page 4: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Introducere

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 4 / 33

Page 5: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Racket vs. SchemeCum se numes, te limbajul despre care discutam?

Racket este dialect de Lisp/Scheme (as, a cum Schemeeste dialect de Lisp);

Racket este derivat din Scheme, oferind instrumentemai puternice;

Racket (fost PLT Scheme) este interpretat de mediulDrRacket (fost DrScheme);

[http://en.wikipedia.org/wiki/Racket_(programming_language)]

[http://racket-lang.org/new-name.html]

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 5 / 33

Page 6: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Analiza limbajului RacketCe analizam la un limbaj de programare?

Gestionarea valorilormodul de tipare al valorilor

modul de legare al variabilelor (managementul valorilor)

valorile de prim rang

Gestionarea execut,ieiordinea de evaluare (generare a valorilor)

controlul evaluarii

modul de construct,ie al programelor

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 6 / 33

Page 7: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Discut,ie despre tipare

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 7 / 33

Page 8: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Tipuri în Racket

În Racket avem:numere: 1, 2, 1.5simboli (literali): 'abcd, 'andreivalori booleene: #t, #fs, iruri de caractere: "s

,ir de caractere"

perechi: (cons 1 2) −→ '(1 . 2)

liste: (cons 1 (cons 2 '())) −→ '(1 2)

funct,ii: (λ (e f) (cons e f)) −→ #<procedure>

·Cum sunt gestionate tipurilor valorilor (variabilelor) lacompilare (verificare) s, i la execut,ie?

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 8 / 33

Page 9: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Modalitat,i de tipare λP.P

·Rolul tipurilor: exprimare a intent,iei programatorului,abstractizare, documentare, optimizare, verificare

+ Tipare – modul de gestionare a tipurilor.

... Clasificare dupa momentul verificarii:staticadinamica

... Clasificare dupa rigiditatea regulilor:tareslaba

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 9 / 33

Page 10: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Modalitat,i de tipare λP.P

·Rolul tipurilor: exprimare a intent,iei programatorului,abstractizare, documentare, optimizare, verificare

+ Tipare – modul de gestionare a tipurilor.

... Clasificare dupa momentul verificarii:staticadinamica

... Clasificare dupa rigiditatea regulilor:tareslaba

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 9 / 33

Page 11: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Tipare statica vs. dinamica λP.PExemplu

Exe

mpl

u

Ex© Tipare dinamica

Javascript:var x = 5;

if(condition) x = "here";

print(x); −→ ce tip are x aici?

Exe

mpl

u

Ex© Tipare statica

Java:int x = 5;

if(condition)

x = "here"; −→ Eroare la compilare: x este int.print(x);

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 10 / 33

Page 12: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Tipare statica vs. dinamica λP.PCaracteristici

... Tipare statica

La compilareValori s, i variabileRulare mai rapida

Rigida: sanct,ioneazaorice construct,ieDebugging mai facilDeclarat,ii explicitesau inferent,e de tipPascal, C, C++, Java,Haskell

... Tipare dinamica

La rulareDoar valoriRulare mai lenta (necesitaverificarea tipurilor)Flexibila: sanct,ioneaza doarcând este necesarDebugging mai dificilPermite metaprogramare (v.eval)Python, Scheme/Racket,Prolog, JavaScript, PHP

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 11 / 33

Page 13: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Tipare tare vs. slaba λP.PExemple

Clasificare dupa libertatea de a agrega valori de tipuridiferite.

Exe

mpl

u

Ex© Tipare tare

1 + "23" → Eroare (Haskell, Python)

Exe

mpl

u

Ex© Tipare slaba

1 + "23" = 24 (Visual Basic)1 + "23" = "123" (JavaScript)

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 12 / 33

Page 14: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Tiparea în Racket

este dinamica

1 (if #t 'something (+ 1 #t)) −→ 'something

2 (if #f 'something (+ 1 #t)) −→ Eroare

este tare

1 (+ "1" 2) −→ Eroare

dar, permite liste cu elemente de tipuri diferite.

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 13 / 33

Page 15: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Legarea variabilelor

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 14 / 33

Page 16: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Variabile (Nume) λP.PProprietat,i generale ale variabilelor

... Proprietat,iidentificatorvaloarea legata (la un anumit moment)domeniul de vizibilitate (scope) + durata de viat,atip

... Starideclarata: cunoas, tem identificatoruldefinita: cunoas, tem s, i valoarea −→ variabila a fost legata

· în Racket, variabilele (numele) sunt legate static princonstruct,iile lambda, let, let*, letrec s, i define, s, i sunt vizibileîn domeniul construct,iei unde au fost definite (except,ie facedefine).

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 15 / 33

Page 17: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Legarea variabilelor λP.PDefinit,ii (1)

+ Legarea variabilelor – modalitatea de asociere aaparit,iei unei variabile cu definit,ia acesteia (deci cuvaloarea).

+ Domeniul de vizibilitate – scope – mult,imeapunctelor din program unde o definit,ie (legare) estevizibila.

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 16 / 33

Page 18: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Legarea variabilelor λP.PDefinit,ii (2)

+ Legare statica – Valoarea pentru un nume estelegata o singura data, la declarare, în contextul în careaceasta a fost definita. Valoarea depinde doar decontextul static al variabilei.

Domeniu de vizibilitate al legarii poate fi desprins lacompilare.

+ Legare dinamica – Valorile variabilelor depind demomentul în care o expresie este evaluata. Valoareapoate fi (re-)legata la variabila ulterior declararii variabilei.

Domeniu de vizibilitate al unei legari – determinat laexecut,ie.

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 17 / 33

Page 19: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Legarea variabilelor în Racket

Variabile definite în construct,ii interioare −→ legate static,local:

lambda

let

let*

letrec

Variabile top-level −→ legate static, global:define

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 18 / 33

Page 20: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Construct,ia lambda

Definit,ie & Exemplu

Leaga static parametrii formali ai unei funct,iiSintaxa:

1 (lambda (p1 ... pk ... pn) expr)

Domeniul de vizibilitate al parametrului pk: mult,imeapunctelor din expr (care este corpul funct,iei), puncte încare aparit,ia lui pk este libera.

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 19 / 33

Page 21: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Construct,ia lambda

Semantica

Aplicat,ie:

1 (( lambda (p1 ... pn) expr)

2 a1 ... an)

1 Evaluare aplicativa: se evalueaza argumentele ak, înordine aleatoare (nu se garanteaza o anumita ordine).

2 Se evalueaza corpul funct,iei, expr, t,inând cont delegarile pk← valoare(ak).

3 Valoarea aplicat,iei este valoarea lui expr, evaluata maisus.

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 20 / 33

Page 22: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Construct,ia let

Definit,ie, Exemplu, Semantica

Leaga static variabile localeSintaxa:

1 (let ( (v1 e1) ... (vk ek) ... (vn en) )

2 expr)

Domeniul de vizibilitate a variabilei vk (cu valoarea ek):mult,imea punctelor din expr (corp let), în care aparit,iilelui vk sunt libere.

Ex© Exemplu

1 (let ((x 1) (y 2)) (+ x 2))

· Atent,ie! Construct,ia (let ((v1 e1) ...(vn en)) expr) –echivalenta cu ((lambda (v1 ...vn) expr) e1 ...en)

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 21 / 33

Page 23: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Construct,ia let*

Definit,ie & Exemplu

Leaga static variabile localeSintaxa:

1 (let* ((v1 e1) ... (vk ek) ... (vn en))

2 expr)

Scope pentru variabila vk = mult,imea punctelor dinrestul legarilor (legari ulterioare) s, icorp – expr

în care aparit,iile lui vk sunt libere.

Ex© Exemplu

1 (let* ((x 1) (y x))

2 (+ x 2))

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 22 / 33

Page 24: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Construct,ia let*

Semantica

1 (let* ((v1 e1) ... (vn en))

2 expr)

echivalent cu

1 (let ((v1 e1))

2 ...

3 (let ((vn en))

4 expr) ... )

Evaluarea expresiilor ei se face în ordine!

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 23 / 33

Page 25: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Construct,ia letrec

Definit,ie

Leaga static variabile locale

Sintaxa:

1 (letrec ((v1 e1) ... (vk ek) ... (vn en))

2 expr)

Domeniul de vizibilitate a variabilei vk = mult,imeapunctelor din întreaga construct,ie, în care aparit,iile lui vksunt libere.

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 24 / 33

Page 26: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Construct,ia letrec

Exemplu

Ex© Exemplu

1 (letrec (( factorial

2 (lambda (n)

3 (if (zero? n) 1

4 (* n (factorial (- n 1)))))))

5 (factorial 5))

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 25 / 33

Page 27: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Construct,ia define

Definit,ie & Exemplu

Leaga static variabile top-level.

Avantaje:definirea variabilelor top-level în orice ordinedefinirea de funct,ii mutual recursive

Ex© Definit,ii echivalente:

1 (define f1

2 (lambda (x)

3 (add1 x)

4 ))

5

6 (define (f2 x)

7 (add1 x)

8 ))

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 26 / 33

Page 28: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Evaluare

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 27 / 33

Page 29: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Evaluarea în Racket

Evaluare aplicativa: evaluarea parametrilor înainteaaplicarii funct,iei asupra acestora (în ordine aleatoare).

Funct,ii stricte (i.e.cu evaluare aplicativa)Except,ii: if, cond, and, or, quote.

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 28 / 33

Page 30: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Controlul evaluarii

quote sau '

funct,ie nestrictaîntoarce parametrul neevaluat

eval

funct,ie strictafort,eaza evaluarea parametrului s, i întoarce valoareaacestuia

Ex© Exemplu

1 (define sum '(+ 2 3))

2 sum ; '(+ 2 3)

3 (eval (list (car sum) (cadr sum) (caddr sum))) ; 5

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 29 / 33

Page 31: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Construct,ia programelor prin recursivitate

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 30 / 33

Page 32: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Recursivitate

Recursivitatea – element fundamental al paradigmeifunct,ionale

Numai prin recursivitate (sau iterare) se pot realizaprelucrari pe date de dimensiuni nedefinite.

Dar, este eficient sa folosim recursivitatea?recursivitatea (pe stiva) poate încarca stiva.

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 31 / 33

Page 33: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

RecursivitateTipuri

pe stiva: factorial(n) = n ∗ factorial(n−1)timp: liniarspat,iu: liniar (ocupat pe stiva)dar, în procedural putem implementa factorialul în spat,iuconstant.

pe coada:factorial(n) = fH(n,1)fH(n,p) = fH(n−1,p ∗n) , n > 1 ; p altfel

timp: liniarspat,iu: constant

beneficiu tail call optimizationIntroducere Tipare Variabile Evaluare Recursivitate

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·Paradigme de Programare – Andrei Olaru

2 : 32 / 33

Page 34: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

RecursivitateTipuri

pe stiva: factorial(n) = n ∗ factorial(n−1)timp: liniarspat,iu: liniar (ocupat pe stiva)dar, în procedural putem implementa factorialul în spat,iuconstant.

pe coada:factorial(n) = fH(n,1)fH(n,p) = fH(n−1,p ∗n) , n > 1 ; p altfel

timp: liniarspat,iu: constant

beneficiu tail call optimizationIntroducere Tipare Variabile Evaluare Recursivitate

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·Paradigme de Programare – Andrei Olaru

2 : 32 / 33

Page 35: Paradigme de Programare - ERASMUS PulseRacket vs. Scheme Cum se numes, te limbajul despre care discutam?˘ Racket este dialect de Lisp/Scheme (as, a cum Scheme este dialect de Lisp);

Sfârs, itul cursului 2Elemente esent,iale

Tipare: dinamica vs. statica, tare vs. slaba;Legare: dinamica vs statica;Racket: tipare dinamica, tare; domeniu al variabilelor;construct,ii care leaga nume în Racket: lambda, let, let*,letrec, define;evaluare aplicativa;construct,ia funct,iilor prin recursivitate.

Introducere Tipare Variabile Evaluare Recursivitate· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Paradigme de Programare – Andrei Olaru

2 : 33 / 33