Differences
This shows you the differences between two versions of the page.
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 39: | Line 39: | ||
===== Exerciții: ===== | ===== Exerciții: ===== | ||
+ | |||
+ | {{:pp:lazy.zip|Laborator 8 - Schelet}}\\ | ||
==== I. Streams ==== | ==== I. Streams ==== | ||
Line 64: | 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 108: | 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 125: | 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. | ||
- | {{:pp:lazy.zip|Laborator 8 - Schelet}} | + | ===== 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)]] |