Kihagyás

1. előadás

Meta

Kezdés: 10:15-11:45

  • 4 db zárthelyi (4., 6., 9., 11. hetek)
  • Házi feladatok
  • Év végi NAGY beadandó

6 pontos:

4 gyakorlati pont + 2 elméleti pont (4., 6. hét)
5 gyakorlati pont + 1 elméleti pont (9.,11. hét)

Teljesítés: min 12 pont (ebből min 3 elméleti)

Nagy beadandó

Kötelező alapfeladat + 3 pontos extra

Megajánlott jegy

Jegy Pontszám
2 12-14
3 15-17
4 18-20
5 21-24

Jegyet lehet javítani vizsgával.

A vizsga hasonló a zárthelyihez.


Nyelvi elemek

-- Komment (Egy soros)

{-
    Kommentek (Több soros)
-}
a :: Int  --Típus Deklaráció
a = 5     --Lineáris függvény

incNumByOne :: Int -> Int -- függvény ami Intet vesz be és ad vissza
incNumByOne x = x + 1
  • Függvény definíciókkal kell megoldani a problémákat.
  • Nincsenek IMPLICIT mellékhatások
  • Statikusan típusozott
    • Fordítási időben minden részkifejezés típusa ismert.
      • Azaz fordítási időben kiderül sok hiba
  • Hivatkozási hely függetlenség
    • Nincs előző értéket felülíró értékadás
  • Rekurzív problémamegoldás

Nem lefuttatás, hanem kiértékelés


λ incNumByOne 5 + 3

Először az incNumByOne, majd az összeadás (+) értékelődik ki.

Függvények neveit konvenció szerint camelCase-el írjuk ki.


skver x = x * x
skverInc x = skver (inc x) -- függvénykompozíció
skverInc = skver . inc -- *szintén* függvénykompozíció

Mohó vs lusta kiértékelés

Mohó (Greedy Execution)

Belülről-kifelé mindent kiértékel

-- squareInc 7 ->
-- square (inc 7) ->
-- square (8) ->
-- 8 * 8
-- 64

Lusta (Lazy Execution)

Kívülről-befelé értékel ki, ami szükséges

-- squareInc 7 ->
-- square (inc 7)
-- (inc 7) * (inc 7)
-- (7+1) * (7+1)
-- 8 * 8
-- 64

Típusváltozók, típusosztályok

inc :: Num a => a -> a -- a: típusváltozó
-- 'Num': generikus típus bármilyen számra

Rekurzió

Lásd: Rekurzió