Personal tools

Un exemplu cu operatorul de succesiune a doua calcule unde gasim ?

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
 
 
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
+
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 {
 +
 
 
....
 
....
 +
 
....
 
....
}
 
  
Ultimul exemplu se putea scrie:
+
}''
 +
 
 +
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; }
  
do { x <- getChar;    print x; }
 
 
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