This shows you the differences between two versions of the page.
|
pp:21:laboratoare:racket:legare [2021/03/22 15:22] bot.pp |
pp:21:laboratoare:racket:legare [2021/03/23 10:05] (current) andrei.olaru [Referințe] |
||
|---|---|---|---|
| Line 22: | Line 22: | ||
| **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}%%'' {{D :20:laboratoare:racket:domeniu_vizibilitate.png?800 |}} | + | **Exemplu:** Domeniul de vizibilitate pentru variabila a este format din liniile de cod ''%%{9, 10, 11, 12, 13, 14}%%'' {{domeniu_vizibilitate.png?800 |}} |
| ===== Context computaţional ===== | ===== Context computaţional ===== | ||
| Line 32: | Line 32: | ||
| **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)}%%'' | ||
| - | {{ :20:laboratoare:racket:context.png?800 |}} | + | {{context.png?800 |}} |
| ===== Legare ===== | ===== Legare ===== | ||
| Line 70: | Line 70: | ||
| 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** | ||
| - | In racket ''%%let%%'' face legare statică: {{:20:laboratoare:racket:lexical-binding-example.png?800 |}} | + | In racket ''%%let%%'' face legare statică: {{lexical-binding-example.png?800 |}} |
| ===== Legare dinamică ===== | ===== Legare dinamică ===== | ||
| Line 80: | Line 80: | ||
| În Scheme (precursorul lui Racket) ''%%define%%'' face legare dinamică: | În Scheme (precursorul lui Racket) ''%%define%%'' face legare dinamică: | ||
| - | {{ :20:laboratoare:racket:dynamic-binding-example.png?800 |}} | + | {{dynamic-binding-example.png?800 |}} |
| 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 194: | Line 194: | ||
| ===== Resurse ===== | ===== Resurse ===== | ||
| - | * [[https://docs.racket-lang.org/reference/let.html|Documentație Racket]] | + | * [[https://ocw.cs.pub.ro/courses/_media/pp/21/laboratoare/racket/legare.zip|Exerciții propuse]] |
| - | * [[https://ocw.cs.pub.ro/courses/_media/pp/21/laboratoare/racket/binding.zip|Exerciții rezolvate și propuse]] | + | * [[https://ocw.cs.pub.ro/courses/_media/pp/21/laboratoare/racket/legare-sol.zip|Soluții]] |
| - | * [[https://ocw.cs.pub.ro/courses/_media/pp/21/laboratoare/racket/binding-sol.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/functionale/functionale-cheatsheet.pdf|Cheatsheet Laboratorul 4]] | + | |
| ===== Referințe ===== | ===== Referințe ===== | ||
| + | * [[https://docs.racket-lang.org/reference/let.html|Documentație Racket]] | ||
| * [[https://www.cs.oberlin.edu/~bob/cs275.spring14/Examples%20and%20Notes/February/Februrary%2028/Lexical%20and%20Dynamic%20Binding.pdf|Lexical Binding]] | * [[https://www.cs.oberlin.edu/~bob/cs275.spring14/Examples%20and%20Notes/February/Februrary%2028/Lexical%20and%20Dynamic%20Binding.pdf|Lexical Binding]] | ||
| * [[https://www.emacswiki.org/emacs/DynamicBindingVsLexicalBinding|legare statica vs legare dinamica]] | * [[https://www.emacswiki.org/emacs/DynamicBindingVsLexicalBinding|legare statica vs legare dinamica]] | ||