Personal tools

Care sunt structurile de control in Haskell ?

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
m
(working)
 
(One intermediate revision by one user not shown)
Line 1: Line 1:
  +
[[Image:Haskelllogo-small-flag-RO-8.jpg|center|Haskell - Un limbaj functional pur]]
  +
  +
<center>
  +
Contactul cu un limbaj de programare nou naste intrebari, mai ales cand este vorba de un limbaj atat de inovator. Cea mai buna cale de a va familiariza cu Haskell este sa conversati cu un interpretor, cum este Hugs. Sau sa folositi GHC si sa conversati cu GHCi (GHC Interactiv).
  +
  +
</center>
  +
__NOTOC__
  +
<center>
  +
{| border=0 cellspacing=5 cellpadding=15
  +
| valign=top bgcolor=#F0F0F0 style="text-align:left" |
 
[[Category:Ro]]
 
[[Category:Ro]]
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.
+
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
 
In Haskell
 
'''if then else''' este un operator conditional
 
'''if then else''' este un operator conditional
if <exp1> then <exp2> else <exp3>
+
[[if]] <exp1> then <exp2> else <exp3>
 
avand mai curand sensul din C al operatorului ' ? : '
 
avand mai curand sensul din C al operatorului ' ? : '
   
Exista si generalizarea lui if , '''case'''-ul. Si mai avem de adaugat aici ceva.
+
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.
 
Ceea ce va lipseste atunci cand programati in stil imperativ in Haskell poate fi,deci,adaugat.
Line 13: Line 23:
 
Exemple clasice de programare cu actiuni (monadice) repetate:
 
Exemple clasice de programare cu actiuni (monadice) repetate:
   
myforever :: IO () -> IO () <br>
+
myforever :: [[IO ()]] -> [[IO ()]] <br>
 
myforever action = action >> myforever action <br>
 
myforever action = action >> myforever action <br>
 
<br>
 
<br>
Line 25: Line 35:
 
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.
 
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.
   
  +
  +
Nota: notati totusi faptul ca algoritmii de lazy evaluation din implementarea limbajului schimba ordinea evaluarilor lasand,( atat de uman, nu ?), fiecare calcul pentru ultimul moment sau pentru momentul cand nu se mai poate fara el.
  +
  +
Aici Haskell seamana putin cu Prolog-ul, in sensul ca alege ordinea efectuarii calculelor dar si difera de Prolog deoarece acolo regulile erau date de programator.
 
----
 
----
Pagina indexata la indexul [[Category:Ro]] [http://www.haskell.org/haskellwiki/Category:Ro Categories:Ro]
+
Pagina indexata la indexul [[Category:Ro]] [http://www.haskell.org/haskellwiki/Category:Ro Categories:Ro] <BR>
  +
 
----
 
----
 
[http://www.haskell.org/haskellwiki/Ro/Haskell <= Inapoi la pagina principala Ro/Haskell. ]<br> <br>
 
[http://www.haskell.org/haskellwiki/Ro/Haskell <= Inapoi la pagina principala Ro/Haskell. ]<br> <br>
[http://www.haskell.org/haskellwiki/Intrebarile_incepatorului <'''-''' Inapoi la Intrebarile incepatorului Ro/Haskell. ]
+
[http://www.haskell.org/haskellwiki/Intrebarile_incepatorului <'''-''' Inapoi la inceputul paginii 'Intrebarile incepatorului Ro/Haskell'. ]

Latest revision as of 06:09, 3 July 2009

Haskell - Un limbaj functional pur

Contactul cu un limbaj de programare nou naste intrebari, mai ales cand este vorba de un limbaj atat de inovator. Cea mai buna cale de a va familiariza cu Haskell este sa conversati cu un interpretor, cum este Hugs. Sau sa folositi GHC si sa conversati cu GHCi (GHC Interactiv).

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.


Nota: notati totusi faptul ca algoritmii de lazy evaluation din implementarea limbajului schimba ordinea evaluarilor lasand,( atat de uman, nu ?), fiecare calcul pentru ultimul moment sau pentru momentul cand nu se mai poate fara el.

Aici Haskell seamana putin cu Prolog-ul, in sensul ca alege ordinea efectuarii calculelor dar si difera de Prolog deoarece acolo regulile erau date de programator.


Pagina indexata la indexul Categories:Ro


<= Inapoi la pagina principala Ro/Haskell.

<- Inapoi la inceputul paginii 'Intrebarile incepatorului Ro/Haskell'.