3. gyakorlat
- Weboldal
- Előző ZH-k feladatai itt megtalálhatóak
- Bónusz feladatok
fromIntegral :: (Integral a, Num b) => a -> b
-- ^----^---- típusváltozók
realToFrac :: (Real a, Fractional b) => a -> b
-- ^^^^^^^^^^^^^^^^^^^^^^---- megkötés
A példa szerint
aa valós,bpedig a tört típuscsaládra van megkötve (Leszármazás engedett).
Típusosztály: pl. Integral, Real, Num
Függvények
fromIntegral: "Egész" számról tud átalakítani tetszőleges számrarealToFrac: "Valós" számokról tört számokra tud képeznitruncate,ceiling,floor,round: Tört számot kerekítenek egész számra
Listák (egyirányú láncolt lista)
[]: üres lista (a lista vége)(:) :: a -> [a] -> [a]: lista elejére helyez egy elemet1 : 2 : []->[1,2]
(++) :: [a] -> [a] -> [a]első lista másodikhoz hozzátoldása
Elemeinek azonos típusúnak kell lennie
Homogén adatszerkezet: Az adatszerkezetben csak azonos típusú elemek szerepelhetnek pl. Lista Heterogén adatszerkezet: !Homogén adatszerkezet pl. Tuple
Lista függvények
Lista ürességének vizsgálata (beépítve null néven)
λ null' []
True
λ null' [1,2,3]
False
λ null' ""
True
λ null' "Hello there"
False
λ null' [[]]
False
Parametrikus polimorfizmus: A függvény működése nem függ a tartalmazott elem(ek) típusától. (pl. a fenti
null'függvény) AKA: Nincs típusmegkötés (type constraint)Ad-hoc polimorfizmus: A függvény működése függ a bemeneti érték típusától. AKA Van típusmegkötés
exactly3Elements :: [a] -> Bool
exactly3Elements [_,_,_] = True
exactly3Elements (_:_:_:[]) = True -- Ez ugyanaz
exactly3Elements _ = False
Lista .. kifejezés (Ranges)
[1..10] -- számok 1-től 10-ig
[10,9..1] -- számok 10-től 1-ig
[1,3..10] -- páros számok 1-től 10-ig (10 nincs benne)
[1..] -- összes szám 1-től (végtelen lista)