--- 1. gyakorlat
-----
f(1) = A
f(2) = B
f(3) = C
------
f(1) = A
f(2) = A
f(3) = B
------
f(1) = A
f(1) = B
f(2) = C
------
1
2
1 + 2
(1 + 2) * 100 = 300
-------------
Melyik NEM függvény és miért?
f(x) = 1
f(z) = 2
g(X) = true
g(Y) = false
g(X) = false
h(1) = "hello"
h(3) = "world"
h(2) = "Haskell"
--- 2. gyakorlat
-----
-- masodik.hs
-- Windows parancsori értelmezők
-- powershell
-- cmd
-- Fájlok listázása: ls VAGY dir
-- ghci spéci parancsok
-- :l masodik.hs <- betöltés (load)
-- :r <- újratöltés (reload)
s = "Haskell is cool"
-- https://people.inf.elte.hu/poor_a/
inc n = n + 1
even' m = m `mod` 2 == 0
even'' m = mod m 2 == 0
-- Összehasonlító operátorok (függvények):
-- 2 == 2 egyenlő
-- 2 /= 3 nem egyenlő
-- 2 > 1 nagyobb
-- 2 >= 2 nagyobb vagy egyenlő
-- logikai operátorok (függvények):
-- True && True logikai ÉS
-- True || False logikai VAGY
-- Logikai ÉS művelet
-- True ÉS True -> True
-- True ÉS False -> False
-- False ÉS True -> False
-- False ÉS False -> False
-- Mintaillesztés:
and' True True = True
and' True False = False
and' False True = False
and' False False = False
and'' True True = True
and'' _ _ = False
--- 3. gyakorlat
-----
xor True True = False
xor True False = True
xor False True = True
xor False False = False
xor''''' False a = a
xor''''' True a = not a
xor' a b = a /= b
{-
xor'' True False = True -- parciális függvény
xor'' False True = True
-}
xor'' True False = True -- totális függvény
xor'' False True = True
xor'' a b = False
{-
-- Nem jó, mert minden paraméternek különböző nevet kell adni
xor''' True False = True
xor''' False True = True
xor''' a a = False
-}
xor'''' True False = True -- totális függvény
xor'''' False True = True
xor'''' _ _ = False -- catch all minta: _
{-
xor'''' _ _ = False
xor'''' True False = True -- totális függvény
xor'''' False True = True
-}
------
-- Karakter minták
isA 'a' = True
isA 'A' = True
isA _ = False
-----------
fugven 42 12
a fugven z -> mod a z \= 0 -- rossz
fugven a z = mod a z /= 0 -- helyes
a `fugven` z =
--- 4. gyakorlat
-----
fun 'a' = "is"
fun 'x' = "interesting"
fun 'y' = "functional"
fun _ = "Haskell"
-----
Kérdések:
"Haskell" "is" "functional"
Parciális vagy totális? Miért?
-----
-- downloads.haskell.org
nextDay a
| a < 0 = error "nextDay: input can't be negative"
| a > 6 = error "nextDay: input can't be greater than 6"
| a == 6 = 0
| otherwise = a + 1 -- otherwise nem kötelező, helyette szerepelhetne a < 6 is (mert már csak az maradt ki)
-- ez is ugyanolyan jó:
nextDay a
| a == 6 = 0
| 0 <= a && a < 6 = a + 1
| a < 0 = error "nextDay: input can't be negative"
| a > 6 = error "nextDay: input can't be greater than 6"
--- Rekurzió
-- Nem jó:
-- fact :: Integer -> Integer
-- fact n = n * fact (n-1) -- Rekurzív eset
-- Végtelen rekurzió:
-- Hiányzik a nem rekurzív alapeset
-- fact 2 -> 2 * fact 1 -> 2 * 1 * fact 0 -> 2 * 1 * 0 * fact (-1) ...
fact :: Integer -> Integer
fact 0 = 1 -- Alapeset (nem rekurzív függvényág)
fact n = n * fact (n-1) -- Rekurzív eset
--- 5. gyakorlat
-----
min' x y
| x <= y = x
| x > y = y
------
min'' x y
| x <= y = x -- ha elfogytak az őrfeltételek (mindegyik False volt), akkor megyünk a következő függvényágra
min'' x y -- azaz ide
| x > y = y
--- 6. gyakorlat
-----
descending :: Int -> [Int]
descending n = list
where -- segédváltozók és segédfüggvények
list = [n, n-1 .. (-n)]
data Something = SomeInt Int | SomeString String -- új saját adatszerkezet