Difference between revisions of "Cum se scrie Hello World in Haskell ?"

From HaskellWiki
Jump to navigation Jump to search
 
m
Line 1: Line 1:
  +
[[Category:Ro]]
  +
 
Programul "Hello World" se '''scrie''' asa cum vedeti mai jos. Este un modul numit '''Main''' cu o functie constanta '''main''' care are tipul '''IO ()'''. Acesta este tipul '''actiunilor de I/O'''.
 
Programul "Hello World" se '''scrie''' asa cum vedeti mai jos. Este un modul numit '''Main''' cu o functie constanta '''main''' care are tipul '''IO ()'''. Acesta este tipul '''actiunilor de I/O'''.
   
Line 20: Line 22:
 
Adesea '''main''' este scrisa in do-notatie. Incercati programul:
 
Adesea '''main''' este scrisa in do-notatie. Incercati programul:
   
  +
<haskell>
 
module Main where
 
module Main where
   
Line 25: Line 28:
   
 
return ()
 
return ()
  +
</haskell>
 
 
sau varianta cu sintaxa explicita:
 
sau varianta cu sintaxa explicita:
   
  +
<haskell>
 
 
module Main where
 
module Main where
   
 
main = do { putStr "Hello, World\n" ; return () }
 
main = do { putStr "Hello, World\n" ; return () }
  +
</haskell>
 
 
----
 
----
 
Practic cum rulati acest program: <br>
 
Practic cum rulati acest program: <br>
Line 46: Line 49:
 
----
 
----
 
Tema: Ganditi-va cum s-ar putea lucra cu o lista infinita de actiuni de IO din care doar unele (in numar finit) se vor efectua la executie !
 
Tema: Ganditi-va cum s-ar putea lucra cu o lista infinita de actiuni de IO din care doar unele (in numar finit) se vor efectua la executie !
  +
----
  +
Pagina indexata la indexul [[Category:Ro]] [http://www.haskell.org/haskellwiki/Category:Ro Categories:Ro]
  +
----
  +
[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. ]

Revision as of 22:56, 24 January 2008


Programul "Hello World" se scrie asa cum vedeti mai jos. Este un modul numit Main cu o functie constanta main care are tipul IO (). Acesta este tipul actiunilor de I/O.

module Main where

main = putStr "Hello, World\n"


(Toate aceste actiuni formeaza monada de IO - asta daca ne gandim la setul de actiuni ca la o structura algebrica. Dar asta s-ar putea sa nu va intereseze cand programati cu operatii de IO asa cum pe un contabil nu-l intereseaza teoria structurilor algebrice - grup, inel, corp - care se pot defini de catre un matematician cu numerele cu care el lucreaza.)

Aceasta constanta main are in exemplul nostru valoarea: putStr "Hello World \n".


Cum se executa programul ?

Functia constanta main este o actiune de I/O.

In cursul executiei programului se evalueaza aceasta main (in stilul lazy in care o functioneaza programele Haskell) iar valoarea de I/O obtinuta este executata producand efecte pe ecran. In realitate procesul este ceva mai complicat, Haskell executa o actiunea compusa de I/O evaluind bucati din ea pe masura ce are nevoie de ele. Acest lucru permite sa ne gandim la actiuni de I/O in forma recursiva, la care apelul recursiv se face dupa nevoie. Sunt frecvent folosite.


Adesea main este scrisa in do-notatie. Incercati programul:

 
module Main where

main = do putStr "Hello, World\n"

          return ()

sau varianta cu sintaxa explicita:

module Main where

main = do { putStr "Hello, World\n" ; return () }

Practic cum rulati acest program:
1)La promptul interpretorului Hugs dati spre evaluare constanta main sau orice functie care produce un rezultat din tipul IO ().

2)Puteti rula programul cu: runhugs <numeprogram>.hs
Runhugs incarca Hugs care apoi incarca programul si executa actiunea obtinuta prin evaluarea lui main.
Cel putin sub Linux merge foarte bine.


Nota: Evaluarea unei liste de actiuni de IO NU executa operatiile de pe lista ! Pur si simplu da ca rezultat lista. Actiunile de IO sunt valori de prim ordin ca orice alte date din limbajul Haskell si pot fi puse in liste in structuri, manipulate. Abia la final valoarea de tip IO a lui main este cea care declanseaza efectele.


Tema: Ganditi-va cum s-ar putea lucra cu o lista infinita de actiuni de IO din care doar unele (in numar finit) se vor efectua la executie !


Pagina indexata la indexul Categories:Ro


<= Inapoi la pagina principala Ro/Haskell.

<- Inapoi la Intrebarile incepatorului Ro/Haskell.