Difference between revisions of "Un exemplu cu operatorul de succesiune a doua calcule unde gasim ?"
Line 9: | Line 9: | ||
print 3 |
print 3 |
||
− | este o actiune monadica ce afiseaza pe 3 si produce un |
+ | este o actiune monadica ce afiseaza pe 3 si produce un rezultat (), |
− | rezultat () |
||
ea avand tipul IO () |
ea avand tipul IO () |
||
O functie care primeste x si produce ca rezultat al |
O functie care primeste x si produce ca rezultat al |
||
calculelor actiunea de tiparire a lui x este: |
calculelor actiunea de tiparire a lui x este: |
||
− | (\x -> print x) |
+ | ''(\x -> print x)'' |
− | + | Daca le inlantuim cu >>= rezultatul va fi o secventa |
|
de doua afisari: |
de doua afisari: |
||
− | iar a doua va afisa () oferita de prima. |
+ | iar a doua functie va afisa acea () oferita de prima actiune. |
− | Hugs> print 3 >>= (\ x -> print x) |
+ | ''Hugs> print 3 >>= (\ x -> print x) |
+ | |||
3 |
3 |
||
+ | |||
() |
() |
||
+ | '' |
||
Iata alt exemplu, mai reusit: |
Iata alt exemplu, mai reusit: |
||
− | getChar >>= (\ x -> print x) |
+ | ''getChar >>= (\ x -> print x) |
+ | |||
6 |
6 |
||
+ | |||
'6' |
'6' |
||
+ | '' |
||
getChar asteapta o tasta |
getChar asteapta o tasta |
||
Line 39: | Line 44: | ||
Insa acest operator >>= se foloseste de fapt ascuns |
Insa acest operator >>= se foloseste de fapt ascuns |
||
in spatele do-notatiei. |
in spatele do-notatiei. |
||
− | Deci unde este |
+ | Deci unde este scris |
+ | |||
− | do { |
+ | ''do { |
+ | |||
.... |
.... |
||
+ | |||
.... |
.... |
||
− | } |
||
+ | }'' |
||
⚫ | |||
+ | |||
+ | de fapt in spatele acestei do-notatii se ascund succesiuni |
||
+ | de operatori >>= |
||
+ | |||
⚫ | |||
+ | |||
⚫ | |||
⚫ | |||
7 |
7 |
||
+ | |||
'7' |
'7' |
||
+ | '' |
||
si e mult mai usor de inteles asa. |
si e mult mai usor de inteles asa. |
Latest revision as of 09:17, 8 February 2010
In Haskell >>=
este compunerea in succesiune a doua calcule. Puteti
sa-mi dati un exemplu?
Ex:
print 3
este o actiune monadica ce afiseaza pe 3 si produce un rezultat (), ea avand tipul IO ()
O functie care primeste x si produce ca rezultat al calculelor actiunea de tiparire a lui x este: (\x -> print x)
Daca le inlantuim cu >>= rezultatul va fi o secventa de doua afisari: iar a doua functie va afisa acea () oferita de prima actiune.
Hugs> print 3 >>= (\ x -> print x)
3
()
Iata alt exemplu, mai reusit:
getChar >>= (\ x -> print x)
6
'6'
getChar asteapta o tasta apasam pe 6 si caracterul '6' va fi trimis functiei urmatoare si afisat.
Insa acest operator >>= se foloseste de fapt ascuns in spatele do-notatiei. Deci unde este scris
do {
....
....
}
de fapt in spatele acestei do-notatii se ascund succesiuni de operatori >>=
Ultimul exemplu de mai sus se putea scrie:
do { x <- getChar; print x; }
7
'7'
si e mult mai usor de inteles asa.
Concluzia: E mai usor de folosit do-notatia decat operatorul >>= .
pagina in dezvoltare