Personal tools

Cum scriu functia main ca sa pot compila si obtine un executabil ?

From HaskellWiki

Revision as of 22:50, 18 January 2011 by Ha$kell (Talk | contribs)

Jump to: navigation, search

1 . 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 ?


2 . 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>"

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.

3 . 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