Personal tools

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

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
Line 1: Line 1:
 
==. Problema ==
 
==. Problema ==
   
Am scris functia care transforma gradele Celsius in grade Farenheit si Kelvin.
+
Am scris functia care transforma gradele Celsius in grade Fahrenheit si Kelvin:
 
<haskell>
 
<haskell>
   
Line 13: Line 13:
 
Cum scriem functia main ca sa putem:
 
Cum scriem functia main ca sa putem:
 
- citi date
 
- citi date
- aplela functia noastra de transformare
+
- apela functia noastra de transformare
 
- scrie rezultatul,
 
- scrie rezultatul,
 
iar codul sa-l transformam in executabil '''?'''
 
iar codul sa-l transformam in executabil '''?'''
Line 65: Line 65:
   
 
Alte comenzi penmtru compilat pot include librarii: vedeti OpenGl in Haskell.
 
Alte comenzi penmtru compilat pot include librarii: vedeti OpenGl in Haskell.
  +
  +
==. Compilare si rulare ==
  +
  +
Asa arata setul de comenzi dat la terminal:
  +
  +
<haskell>
  +
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$
  +
</haskell>
  +
----
  +
Intrebare pusa de '''damiamcs''', ian 2011
  +
----
   
 
[[Category:Ro]]
 
[[Category:Ro]]

Revision as of 22:50, 18 January 2011

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