Difference between revisions of "Cum se scrie functia main ?"

From HaskellWiki
Jump to: navigation, search
m
m
 
(No difference)

Latest revision as of 10:21, 29 November 2019

Iata trei exemple ale functiei main. Aceasta este scrisa in do-notatie fara acolade si fara ;. Foloseste getLine ca functie pentru citit un String. getLine chiar are tipul: getLine:: IO String. Adica este o actiune de IO care poate fi folosita pentru a lega o variabila la Stringul citit.

main1 = do  
    putStrLn "Cum te cheama ?"  
    nume <- getLine 
    putStrLn ("Buna ziua " ++ name)


Aceasta este o functie main care foloseste readLn pentru a citi numere si return pentru a face calcule. (Return nu este ceea ce stiati ci un fel de ambalator (e o functie de injectie in monada de IO) care incapsuleaza rezultatul unui calcul ibcat sa poata fi folosit in do-notatie. Ca tip transforma de exemplu un Int in IO Int, samd. Return este polimorfic, daca doriti ca el sa fie de tipul IO Int va fi asa, daca il doriti de tipul IO Integer va fi asa etc. Tipul lui putStr este String -> IO (). Are nevoie de un argument, stringul de tiparit si rezultatul e o operatie de IO care nu returneaza nimic, deci nu o folositi in do-notatie impreuna cu semnul <-.

main = do  {x <-  readLn ;
            y <-  readLn ;
            z <- return (x+y) ;
            putStr z ;
           }

Nota: Din cauza polimorfismului puteti folosi readLn si la alte tipuri, cum este Bool:

Prelude> do {x <- readLn ; if x==True then putStr "True" else putStr "False" }
True
TruePrelude> do {x <- readLn ; if x==True then putStr "True" else putStr "False" }
False
FalsePrelude>


Actiunea putStrLn este similara lui putStr dar trece, la executie, pe randul urmator. putStr "ala" >> putStrLn "bala"va scrie pur si simplu "alabala" dar putStr'Ln' "ala" >> putStrLn "bala" va scrie "bala" pe randul urmator.

main = do putStrLn "Cat fac 3 + 5?"
           x <- readLn
           if x == 8
              then putStrLn "Corect !"
              else putStrLn "Gresit !"

Tipurile functiilor de IO folosite mai sus:

Prelude> :t putStr
putStr :: String -> IO ()

Prelude> :t putStrLn
putStrLn :: String -> IO ()

Prelude> :t getLine
getLine :: IO String

Prelude> :t readLn
readLn :: Read a => IO a

Prelude> :t read
read :: Read a => String -> a

functia read nu serveste la operatii de IO ci doar la parcurgerea unor stringuri cu niste parsere pentru a extrage din ele valori conforme cu tipul rezultatului cerut:

Prelude> (read "124"):: Integer
124
Prelude> (read "124"):: Float
124.0
Prelude> (read "124"):: Int
124

Pagina indexata la indexul Categories:Ro


<= Inapoi la pagina principala Ro/Haskell.

<- Inapoi la Intrebarile incepatorului Ro/Haskell.