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

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

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