Care sunt structurile de control in Haskell ?

From HaskellWiki
Revision as of 10:01, 21 January 2008 by Ha$kell (talk | contribs)
Jump to navigation Jump to search

Haskell fiind limbaj functional cu "lazy evaluation" nu are structuri de control in sensul din limbajele imperative. Dar le puteti inventa si folosi pe cele dorite de dumneavoastra ! Flexibilitate maxima. (Re)vedeti si: Cum scriu bucla while din functia principala, main ?

In Haskell if then else este un operator conditional

if <exp1> then <exp2> else <exp3>

avand mai curand sensul din C al operatorului ' ? : '

Exista si generalizarea lui if , case-ul. Si mai avem de adaugat aici ceva.

Ceea ce va lipseste atunci cand programati in stil imperativ in Haskell poate fi,deci,adaugat. Repet: Haskell permite sa va definiti propriile structuri de control pentru programarea "imperativa" dar (sunt mai usor de facut) fara variabile locale in vre-un context. Deci puteti defini imediat un for care cicleaza parcurgand valorile dintr-o lista si e ceva mai complicat de facut un for care modifica o variabila dintr-un context. Exemple clasice de programare cu actiuni (monadice) repetate:

myforever :: IO () -> IO ()
myforever action = action >> myforever action

myrepeat :: Int -> IO a -> IO ()
myrepeat 0 act = return ()
myrepeat n act = act >> myrepeat (n-1) act

Dupa "Tackling the Awkward Squad:..." de Simon Peyton Jones. Neaparat de citit cap 2.4 - Control structures din ea. Apoi 2.5.

Si nu uitati: Programarea "imperativa" in Haskell este de fapt evaluare lazy a unor succesiuni de >>= (bind-uri) dintr-o monada. Uzual monada de I/O. Iar do-notatia functioneaza ca un fel de macrodefinitie care prin expandare produce acele succesiuni de bind-uri.


Pagina indexata la indexul Categories:Ro


<= Inapoi la pagina principala Ro/Haskell.

<- Inapoi la Intrebarile incepatorului Ro/Haskell.