Típusok, konstansok

A lecke elkezdése elött érdemes elolvasni a fogalmak című részt is, de legalább a ghci parancsokat ismerni (benne van a foglamak között).

Típusok

Haskellban a típusokat mindig nagybetűvel kell kezdeni.

A legtöbbet használt típusok:

Int -- egész szám (32/64 bit architektúrától függően)
Integer -- egész szám, limitje a memória mérete
Float -- lebegőpontos szám
Double -- dupla pontosságú lebegőpontos szám
Bool -- logikai érték, True vagy False
Char -- karakter, 'a', 'b', '1', '!', '?', ... apostrofok között
String -- karakterlánc, "Hello World", "Haskell", "1", "2", ... idézőjelek között

Konstansok

A konstansok olyan függvények amiknek nincs paramétere, így az értéke mindig ugyanaz.

Típusszignatúra

A típusszignatúra a függvény típusát írja le. A függvény neve után kettősponttal elválasztva kell megadni. A típusokat nyilak választják el egymástól. A legutolsó típus a visszatérési érték típusa.

pl:

egy :: Int

inc :: Int -> Int

Első lecke

A függvények nevét általában kisbetűvel kezdjük, de lehet használni speciális karaktereket is, ezeket a típusszignatúrában zárojelbe kell tenni. A függvény paramétereit szóközzel elválasztva adjuk meg.

Paraméterek

Haskellban olyan értelemben nem léteznek változók mint más nyelvekben (hiszen az egy mellékhatás hogy megváltozik az értéke), a függvény paramétereire szoktak változóként hivatkozni.

A paraméterek nevét kissbetüvel szokás kezdeni.

Számok

egy :: Int
egy = 1
-- ez egy konstans függvény, mindig 1-et ad vissza

inc :: Int -> Int
inc a = a + 1
-- megnöveljük eggyel a kapott számot
-- inc 5 = 6

mult :: Int -> Int -> Int
mult a b = a * b
-- mult 5 6 = 30

kettőharmad :: Double
kettőharmad = 2 / 3

nagyonNagySzám :: Integer
nagyonNagySzám = 99 ^ 1000
  • Integer végtelen addig amíg van memória, nem okoz gondot kiírni és kiszámolni ezt a számot
  • Ha Int lenne a típusa akkor többször is Int overflow lenne, azaz amint eléri a legnagyobb Int elemet (32 biten 2^31-1, 64 biten 2^63-1) akkor negatív számokat kezdene kiírni.
  • A legnagyobb és legkisebb Int számokat a minBound és maxBound függvényekkel lehet lekérdezni.
    • minBound :: Int, maxBound :: Int

Létező függvények számokra:

  • (+) :: Int -> Int -> Int, összeadás
  • (-) :: Int -> Int -> Int, kivonás
  • (*) :: Int -> Int -> Int, szorzás
  • div :: Int -> Int -> Int, egész osztás (csak egész számokon működik)
  • (/) :: Double -> Double -> Double, tört osztás
  • mod :: Int -> Int -> Int, maradékos osztás

Logikai értékek

true :: Bool
true = True
-- konstans true függvény, mindig True-t ad vissza

false :: Bool
false = False
-- konstans false függvény, mindig False-t ad vissza

and :: Bool -> Bool -> Bool
and a b = a && b

Létező függvények Bool típusra:

  • (&&) :: Bool -> Bool -> Bool, és függvény
  • (||) :: Bool -> Bool -> Bool, vagy függvény
  • not :: Bool -> Bool, negálja a paramétert (True -> False, False -> True), más nyelvekben !, ~ jelölik
  • (==) :: Bool -> Bool -> Bool egyenlőség vizsgálat
  • (/=) :: Bool -> Bool -> Bool nem egyenlő

Szöveg

A String típus egy lista Char típusú elemekből. A listákat késöbb, a harmadik leckében fogjuk részletesebben megismerni.


char :: Char
char = 'a'

ello :: String
ello = "ello"

hello :: String
hello = 'H' : "ello"

world :: String
world = "World"

helloWorld :: String
helloWorld = hello ++ " " ++ world
-- helloWorld = "Hello World"

Létező függvények String típusra:

  • (:) :: Char -> String -> String, hozzáfűz egy karaktert a string elejéhez (legelső elemnek)
  • (++) :: String -> String -> String, két stringet fűz össze
  • words :: String -> [String], a stringet szavakra bontja
  • unwords :: [String] -> String, a szavakat összefűzi egy stringgé
  • lines :: String -> [String], a stringet sorokra bontja
  • unlines :: [String] -> String, a sorokat összefűzi egy stringgé