This shows you the differences between two versions of the page.
pp:23:laboratoare:racket:legare [2023/03/18 23:03] bot.pp created |
pp:23:laboratoare:racket:legare [2023/03/21 14:37] (current) bot.pp |
||
---|---|---|---|
Line 23: | Line 23: | ||
**Domeniul de vizibilitate** al unei variabile este mulțimea punctelor din program în care variabila este vizibilă. Cu alte cuvinte, domeniul de vizibilitate al variabilei x este reprezentat de porțiunile din program în care aceasta poate fi accesată (este vizibilă). | **Domeniul de vizibilitate** al unei variabile este mulțimea punctelor din program în care variabila este vizibilă. Cu alte cuvinte, domeniul de vizibilitate al variabilei x este reprezentat de porțiunile din program în care aceasta poate fi accesată (este vizibilă). | ||
- | **Exemplu:** Domeniul de vizibilitate pentru variabila ''%%a%%'' este format din liniile de cod ''%%{9, 10, 11, 12, 13, 14}%%'' {{domeniu_vizibilitate.png?800 |}} | + | **Exemplu:** Domeniul de vizibilitate pentru variabila ''%%a%%'' este format din liniile de cod ''%%{9, 10, 11, 12, 13, 14}%%'' {{:pp:media:domeniu_vizibilitate.png?600 |}} |
===== Context computaţional ===== | ===== Context computaţional ===== | ||
Line 33: | Line 33: | ||
**Exemplu:** Pe linia 6 contextul computaţional este: ''%%{(a 2) (b 32) (s P)}%%'' | **Exemplu:** Pe linia 6 contextul computaţional este: ''%%{(a 2) (b 32) (s P)}%%'' | ||
- | {{context.png?800 |}} | + | {{:pp:media:context.png?500 |}} |
===== Legare ===== | ===== Legare ===== | ||
Line 71: | Line 71: | ||
Legarea statică creează un nou domeniu de vizibilitate (scope) pentru o variabilă, în funcţie de contextul lexical al programului (partea programului care este evaluată), așa că în literatura de specialitate se mai numește **lexical scoping** / **lexical binding**. | Legarea statică creează un nou domeniu de vizibilitate (scope) pentru o variabilă, în funcţie de contextul lexical al programului (partea programului care este evaluată), așa că în literatura de specialitate se mai numește **lexical scoping** / **lexical binding**. | ||
- | În Racket ''%%let%%'' face legare statică: {{lexical-binding-example.png?800 |}} | + | În Racket ''%%let%%'' face legare statică: {{:pp:media:lexical-binding-example.png?600 |}} |
===== Legare dinamică ===== | ===== Legare dinamică ===== | ||
Line 81: | Line 81: | ||
În Scheme (precursorul lui Racket) ''%%define%%'' face legare dinamică: | În Scheme (precursorul lui Racket) ''%%define%%'' face legare dinamică: | ||
- | {{dynamic-binding-example.png?800 |}} | + | {{:pp:media:dynamic-binding-example.png?600 |}} |
Observați că același apel de funcție cu aceiași parametri întoarce rezultate diferite în funcție de contextul global => **introduce efecte laterale**, de aceea editarea contextului global cu ''%%define%%'' este interzisă în Racket. | Observați că același apel de funcție cu aceiași parametri întoarce rezultate diferite în funcție de contextul global => **introduce efecte laterale**, de aceea editarea contextului global cu ''%%define%%'' este interzisă în Racket. | ||
Line 196: | Line 196: | ||
* [[https://docs.racket-lang.org/reference/let.html|Documentație Racket]] | * [[https://docs.racket-lang.org/reference/let.html|Documentație Racket]] | ||
- | * [[https://ocw.cs.pub.ro/courses/_media/pp/22/laboratoare/racket/legare-schelet.zip|Schelet]] | + | * [[https://ocw.cs.pub.ro/courses/_media/pp/23/laboratoare/racket/legare-schelet.zip|Schelet]] |
- | * [[https://ocw.cs.pub.ro/courses/_media/pp/22/laboratoare/racket/legare-solutii.zip|Soluții]] | + | * [[https://ocw.cs.pub.ro/courses/_media/pp/23/laboratoare/racket/legare-solutii.zip|Soluții]] |
* [[https://github.com/cs-pub-ro/PP-laboratoare/raw/master/racket/legare/legare-cheatsheet.pdf|Cheatsheet Laboratorul 4]] | * [[https://github.com/cs-pub-ro/PP-laboratoare/raw/master/racket/legare/legare-cheatsheet.pdf|Cheatsheet Laboratorul 4]] | ||