This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
laboratoare:09-intarzierea-evaluarii-inchideri-nulare [2015/04/20 20:27] matei.popovici [Aplicatii:] |
laboratoare:09-intarzierea-evaluarii-inchideri-nulare [2016/04/12 12:19] (current) mihai.dumitru2201 |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Laborator 9 - Întârzierea evaluării ===== | + | ===== Întârzierea evaluării ===== |
Line 7: | Line 7: | ||
* **promisiuni** | * **promisiuni** | ||
- | ====Evaluare aplicativă vs. evaluare leneșă==== | + | ====Evaluare aplicativă vs. evaluare normala==== |
Fie urmatoarea expresie, scrisă într-o varianta relaxata a Calculului Lambda (in care valori numerice si operatii pe acestea sunt permise, iar functiile sunt in forma uncurry): | Fie urmatoarea expresie, scrisă într-o varianta relaxata a Calculului Lambda (in care valori numerice si operatii pe acestea sunt permise, iar functiile sunt in forma uncurry): | ||
Line 64: | Line 64: | ||
=== Siruri in Scheme === | === Siruri in Scheme === | ||
- | - Definiți un stream de numere 1 'ones_stream' folosind evaluarea lenesa din scheme care apeland | + | - Definiți un stream de numere 1 'ones_stream' folosind evaluarea normala din Scheme |
- | * ''(ones_stream)'' => ''(1 . #procedure)'' unde dacă vom apela ''(#procedure)'', vom obtine: | + | |
- | * ''(1 . #procedure)'' din nou. | + | |
- | + | ||
- Creati o funcție take care să funcționeze ca cea din Haskell (take 5 [1,1..] va intoarce [1,1,1,1,1] in haskell) | - Creati o funcție take care să funcționeze ca cea din Haskell (take 5 [1,1..] va intoarce [1,1,1,1,1] in haskell) | ||
* ''(take 5 ones_stream)'' => ''(1 1 1 1 1)'' | * ''(take 5 ones_stream)'' => ''(1 1 1 1 1)'' | ||
- | |||
- | |||
- Creati un stream de numere naturale care va fi reprezentat astfel: | - Creati un stream de numere naturale care va fi reprezentat astfel: | ||
* ''(0 . #procedure)'', unde dacă vom apela procedure vom obtine | * ''(0 . #procedure)'', unde dacă vom apela procedure vom obtine | ||
Line 79: | Line 73: | ||
* HINT: veți avea nevoie de o funcție ajutătoare | * HINT: veți avea nevoie de o funcție ajutătoare | ||
* Testați: ''(take 5 naturals_stream)'' => ''(0 1 2 3 4)'' | * Testați: ''(take 5 naturals_stream)'' => ''(0 1 2 3 4)'' | ||
- | |||
- Definiți o funcție care sa adune două stream-uri: | - Definiți o funcție care sa adune două stream-uri: | ||
* ''(take 5 (sum_stream naturals_stream ones_stream))'' => ''(1 2 3 4 5)'' | * ''(take 5 (sum_stream naturals_stream ones_stream))'' => ''(1 2 3 4 5)'' | ||
* pentru acest task, implementati o functie ''zipWith'' care sa opereze pe stream-uri | * pentru acest task, implementati o functie ''zipWith'' care sa opereze pe stream-uri | ||
- | |||
- | |||
- Creați un stream de numere pare: | - Creați un stream de numere pare: | ||
* Testati: ''(take 5 even_stream)'' => ''(0 2 4 6 8)'' | * Testati: ''(take 5 even_stream)'' => ''(0 2 4 6 8)'' | ||
* pentru acest task, implementati o functie ''map'' care sa opereze pe stream-uri | * pentru acest task, implementati o functie ''map'' care sa opereze pe stream-uri | ||
- | + | - Creați șirul numerelor Fibonacci: | |
- | + | ||
- | 6. Creați șirul numerelor Fibonacci: | + | |
* ''(take 5 fibo_stream)'' => ''(0 1 1 2 3)'' | * ''(take 5 fibo_stream)'' => ''(0 1 1 2 3)'' | ||
* Observam ca fibonacci e definit prin adunarea stream-urilor anterioare. | * Observam ca fibonacci e definit prin adunarea stream-urilor anterioare. | ||
Line 116: | Line 105: | ||
- Aproximatie pentru integrala unei functii pe intervalul ''[a,b]'' | - Aproximatie pentru integrala unei functii pe intervalul ''[a,b]'' | ||
* Scrieti o functie care aproximeaza valoarea integralei unei functii ''f'' intre ''a'' si ''b'', cu toleranta ''0.01''. Strategia de imbunatatire a unei aproximari consta in spargerea intervalului ''[a,b]'' in doua sub-intervale de dimensiune egala ''[a,m]'' si ''[m,b]'', calculul integralei pe fiecare, si adunarea rezultatului. | * Scrieti o functie care aproximeaza valoarea integralei unei functii ''f'' intre ''a'' si ''b'', cu toleranta ''0.01''. Strategia de imbunatatire a unei aproximari consta in spargerea intervalului ''[a,b]'' in doua sub-intervale de dimensiune egala ''[a,m]'' si ''[m,b]'', calculul integralei pe fiecare, si adunarea rezultatului. | ||
+ | |||
+ | === Solutii === | ||
+ | [[https://github.com/Programming-Paradigms/Labs/archive/master.zip|Solutii (inclusiv pentru laboratorul 9)]] |