Cum se scrie Hello World in Haskell ?

From HaskellWiki
Revision as of 20:16, 10 October 2009 by Ha$kell (talk | contribs) (new banner)
Jump to navigation Jump to search

Banim7.gif

Haskell ruleaza si sub Linux si sub Win-dos ! Fiti mai destepti si luati un computer cu Sistem de operare Mandriva Linux ! (Aceasta este o parodie a bannerului unei campanii publicitare, in spiritul dreptului la replica si al libertatii opiniei.)


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.