User Tools

Site Tools


laboratoare:09-intarzierea-evaluarii-inchideri-nulare

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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)]]
laboratoare/09-intarzierea-evaluarii-inchideri-nulare.1429550856.txt.gz · Last modified: 2015/04/20 20:27 by matei.popovici