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
pp:l06 [2019/04/14 19:55]
dmihai
pp:l06 [2020/02/05 15:50] (current)
dmihai [Exerciții:]
Line 1: Line 1:
-====== ​Întârzierea evaluării ======+====== ​Evaluare leneșă ======
  
  
Line 17: Line 17:
 <​code>​(λx.λy.(x + y) 1 (λz.(z + 2) 3))</​code>​ <​code>​(λx.λy.(x + y) 1 (λz.(z + 2) 3))</​code>​
  
-Desigur, evaluarea expresiei ''​(λz.(z + 2) 3)''​ va genera valoarea ''​5'',​ de unde deducem că rezultatul final al expresiei va fi ''​6''​ ( adunarea lui 1 cu rezultatul anterior ). În cadrul acestui raționament,​ am presupus că parametrii sunt evaluați înaintea aplicării funcției asupra acestora. Vom vedea, în cele ce urmează, că evaluarea se poate realiza și in alt mod.+Desigur, evaluarea expresiei ''​(λz.(z + 2) 3)''​ va genera valoarea ''​5'',​ de unde deducem că rezultatul final al expresiei va fi ''​6''​ (adunarea lui 1 cu rezultatul anterior). În cadrul acestui raționament,​ am presupus că parametrii sunt evaluați înaintea aplicării funcției asupra acestora. Vom vedea, în cele ce urmează, că evaluarea se poate realiza și in alt mod.
  
 ====Evaluare aplicativă==== ====Evaluare aplicativă====
Line 40: Line 40:
 ===== Exerciții: ===== ===== Exerciții: =====
  
-{{:​pp:​lazy.zip|Laborator 8 - Schelet}}+{{:​pp:​lazy.zip|Laborator 8 - Schelet}}\\
  
 ==== I. Streams ==== ==== I. Streams ====
Line 66: Line 66:
 Fie șirul: Fie șirul:
  
-$math[a_{n+1} = a_n + sin(a_n)]; unde $math[a_0] este o //​aproximare inițială//,​ aleasă arbitrar.+$math[a_{n+1} = a_n + sin(a_n)]; unde $math[a_0] este o //​aproximare inițială//,​ aleasă arbitrar ​(dar diferită de 0 pentru ca $math[a_{n+1} != a_n]).
  
 Știm că $math[\displaystyle \lim_{n \rightarrow \infty} a_n = \pi] Știm că $math[\displaystyle \lim_{n \rightarrow \infty} a_n = \pi]
Line 110: Line 110:
 Dându-se o funcție $math[f], putem aproxima integrala definită pe intervalul $ [a, b]$, folosind aria trapezului definit de $math[a, b, f(a), f(b)]: Dându-se o funcție $math[f], putem aproxima integrala definită pe intervalul $ [a, b]$, folosind aria trapezului definit de $math[a, b, f(a), f(b)]:
  
-$math[\displaystyle \int_{a}^{b} f(x) dx \approx (b - a)\frac{a+b}{2}]+$math[\displaystyle \int_{a}^{b} f(x) dx \approx (b - a)\frac{f(a)+f(b)}{2}]
  
 Putem obține o aproximare mai bună împărțind intervalul în două și însumând aria celor două trapeze definite de $math[a, m, f(a), f(m)] și de $math[m, b, f(m), f(b)] (unde $math[m] este mijlocul intervalului $ [a, b]$). Putem obține o aproximare și mai bună împărțind aceste două intervale în două și tot așa. Putem obține o aproximare mai bună împărțind intervalul în două și însumând aria celor două trapeze definite de $math[a, m, f(a), f(m)] și de $math[m, b, f(m), f(b)] (unde $math[m] este mijlocul intervalului $ [a, b]$). Putem obține o aproximare și mai bună împărțind aceste două intervale în două și tot așa.
Line 127: Line 127:
 d) Scrieți o funcție care primește o funcție $math[f] și două puncte $math[a, b] și aproximează $math[\displaystyle \int_{a}^{b} f(x) dx] cu toleranța ''​0.001'',​ folosindu-vă de subpunctele anterioare. d) Scrieți o funcție care primește o funcție $math[f] și două puncte $math[a, b] și aproximează $math[\displaystyle \int_{a}^{b} f(x) dx] cu toleranța ''​0.001'',​ folosindu-vă de subpunctele anterioare.
  
 +===== Recommended Reading =====
 +
 +  * [[http://​worrydream.com/​refs/​Hughes-WhyFunctionalProgrammingMatters.pdf| Why Functional Programming Matters (în special secțiunea 4 "​Gluing Programs Together",​ de unde sunt inspirate exercițiile din laborator)]]