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
ésmaxBound
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ásdiv :: Int -> Int -> Int
, egész osztás (csak egész számokon működik)(/) :: Double -> Double -> Double
, tört osztásmod :: 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énynot :: 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 összewords :: String -> [String]
, a stringet szavakra bontjaunwords :: [String] -> String
, a szavakat összefűzi egy stringgélines :: String -> [String]
, a stringet sorokra bontjaunlines :: [String] -> String
, a sorokat összefűzi egy stringgé