Cum scriu functia main ca sa pot compila si obtine un executabil ?
[[Category:Ro]
. Problema
Am scris functia care transforma gradele Celsius in grade Fahrenheit si Kelvin:
temp :: Float -> String
temp x = (show (x * 1.8 + 32) ++ " Fahrenheit, " ++ show (x + 273.15) ++ " Kelvin")
Cum scriem functia main ca sa putem:
- citi date - apela functia noastra de transformare - scrie rezultatul,
iar codul sa-l transformam in executabil ?
. Raspuns
module Main where
main :: IO ()
main = do { putStrLn "Dati nr de grade Celsius :";
strbuf <- getLine;
print $ temp (read strbuf::Float ) ;
return ();
}
temp :: Float -> String
temp x = (show (x * 1.8 + 32) ++ " Fahrenheit, " ++ show (x + 273.15) ++ " Kelvin")
Ce trebuie sa cunoasteti:
1. actiunea de IO pentru scris texte este putStr "<string>" . Exista si un putStrLn "<string>" , care trece apoi pe randul urmator. Similar cu WriteLn din Pascal.
2. actiunea de IO pentru citit un string din tastatura este getLine. Se foloseste ca in exemplu.
3. Functia read se aplica textului din buffer -- un string -- dar trebuie sa stie in ce tip de data il va transforma. Se foloseste deci ca: read <stringul de intrare> :: <tipul rezultatului asteptat>
4. Conversiile din alt tip in string se fac cu functia show, daca bineinteles tipul este din clasa Show. Iar tipurile simple si compuse din tipuri predefinite -- liste, n-uple -- sunt din clasa Show. Dar asa ceva stiati! :)
5. actiunea de IO pentru scrierea la iesire este print si este polimorfica , fiind produsul dintre putStr si show.
6. Pentru a compila fara probleme numiti modului Main , fisierul Main.hs si compilati cu: ghc --make Main.hs
Alte comenzi penmtru compilat pot include librarii: vedeti OpenGl in Haskell.
. Compilare si rulare
Asa arata setul de comenzi dat la terminal:
student3@student3-desktop:~/Desktop$ ghc --make Temperatura.hs
[1 of 1] Compiling Main ( Temperatura.hs, Temperatura.o )
Linking Temperatura ...
student3@student3-desktop:~/Desktop$ ./Temperatura
Dati nr de grade Celsius :
56
"132.79999 Fahrenheit, 329.15 Kelvin"
student3@student3-desktop:~/Desktop$
Intrebare pusa de damiamcs, ian 2011