Difference between revisions of "Care este deosebirea dintre foldl si foldr ?"

From HaskellWiki
Jump to navigation Jump to search
 
m
Line 6: Line 6:
 
30 <br>
 
30 <br>
 
Prelude> <br>
 
Prelude> <br>
 
   
 
Diferenta consta in ordinea in care este parcursa lista. <br>
 
Diferenta consta in ordinea in care este parcursa lista. <br>
 
Diferenta se vede mai usor atunci cand functia aplicata are proprietatea
 
Diferenta se vede mai usor atunci cand functia aplicata are proprietatea
de "necomutativitate a argumentelor" Adica e o functie la care schimband ordinea argumentelor se obtine (in general) alta valoare.
+
de "necomutativitate a argumentelor". Adica e o functie la care schimband ordinea argumentelor se obtine (in general) alta valoare.
   
 
----
 
----

Revision as of 16:58, 19 January 2008

In priviinta valorilor ce se vor obtine dupa aplicarea lui foldl si foldr exista diferente. Ele provin din ordinea de parcurgere a listei. Foldl parcurge lista de la stanga iar foldr o parcurge de la dreapta. Evaluati:

Prelude> foldl (\ a b -> 10 * a + b) 0 [1,2]
12
Prelude> foldr (\ a b -> 10 * a + b) 0 [1,2]
30
Prelude>

Diferenta consta in ordinea in care este parcursa lista.
Diferenta se vede mai usor atunci cand functia aplicata are proprietatea de "necomutativitate a argumentelor". Adica e o functie la care schimband ordinea argumentelor se obtine (in general) alta valoare.


In priviinta tipurilor lui foldl si foldr nu este nici o diferenta:
Prelude> :t foldl
foldl :: (a -> b -> a) -> a -> [b] -> a
Prelude> :t foldr
foldr :: (a -> b -> b) -> b -> [a] -> b


<= Inapoi la pagina principala Ro/Haskell