Ez a tárgy a funkcionális programozás, azon belül is a tisztán funkcionális programozás paradigmájának alapjaival, annak bemutatásával foglalkozik. Mindezeket a Clean programozási nyelven keresztül tárgyaljuk és mutatunk hozzájuk alkalmazási lehetőségeket a valós életben.

Segédanyagok

A Clean nyelv és a funkcionális programozási paradigma megismerésével kapcsolatban a következő linkek javasoltak. A fordító letöltésekor ügyeljünk arra, hogy a legaktívabban a Clean Windowsos változatát fejlesztik, ezért azzal érdemes dolgozni. (Nem Windows rendszereken a Wine segítségével lehet például futtatni.)

Ezek az anyagok a zárthelyi dolgozat írásakor is elérhetőek lesznek, viszont más, különösen hozott anyagot nem lehet használni! Kiegészítő lehetőségként meg lehet nézni a Haskellben írt jegyzetet is, noha nem minden ott szereplő megoldás alkalmazható közvetlenül:

Továbbá Nyékyné Gaizler Judit szerkesztésében megjelent ,,Programozási nyelvek'' könyvben is található egy külön fejezet csak a funkcionális programozási nyelvekről. Ezt is érdemes lehet áttanulmányozni a felkészüléshez.

Hasznos tudnivalók a beadandókhoz

A feladatok megoldása során az alábbi, gyakran felmerülő problémákra érdemes odafigyelni, illetve megfogadni a tanácsokat:

  • A foldr függvény jó barát! Igen sok probléma írható fel vele tömören. Ne feledjük, hogy az általa leírt összegzésnek az eredménye bármilyen típus lehet:

    foldr :: (a b -> b) b [a] -> b
    foldr f r [x0 ... xn] = f x0 (f x1 (... (f xn r) ...))
  • Ha a Clean telepítési könyvtára nem a C: meghajtón van, nem feltétlenül sikerül a fordítás, az IDE szinte teljesen lemerevedik.

  • Vigyázzunk arra, hogy a várakozásokkal ellentétben [1,1..1] == [1..].

Ez a lista természetesen nem teljes, ha akadnak további, bosszantó gondok, jelezzük az oktatóknak és bővíteni fogjuk a listát velük és a megoldásaikkal!

Rinus Plasmeijer előadásai

A félév előadásainak egy részét Rinus Plasmeijer tanár úr, a nijmegeni Radboud Universiteit professzora, a Clean nyelv megalkotója tartja tömbösítve 2017. november 20. és 23. között. Ennek részleteiről egy külön aloldalon találhatunk angolul információkat (mivel maguk az előadások, valamint a mellékelt segédanyagok is angol nyelvűek).

Követelmények

A tárgy kollokvium, amelyhez szóbeli vizsga tartozik. A vizsga tételsora lentebb olvasható. A vizsgázás előfeltételeként azonban teljesíteni először a gyakorlati számonkérést, amelynek része két kötelezően teljesítendő beadandó, valamint két géptermi zárthelyi dolgozat sikeres megírása.

Mind a beadandók, mind pedig a zárthelyi során a Clean tisztán funkcionális nyelven kell programokat írni. Ezek az tananyaghoz kapcsolódó, önállóan megoldandó programozási feladatokat jelentenek, amelyekhez az oktatók segítségét is igénybe lehet venni elektronikus levél írásával vagy a konzultációs alkalmakon. A feladatokat és az értékelésüket a BE-AD rendszerben lehet majd elérni, a tárgyhoz tartozó csoportba történő sikeres feliratkozást követően. A BE-AD szerverre a kari, INF-es (Pandorás) azonosítóval és jelszóval lehet belépni, oda külön regisztrálni már nem kell.

A feladatok mindegyikét egy-egy zárthelyi dolgozat követi. Ezek a dolgozatok a beadandóhoz hasonló, szintén önállóan megoldandó programozási feladatok lesznek, amelyekből együtt számtani átlagban legalább 60%-os eredményt kell elérni a vizsgázáshoz. A két hibátlan dolgozatot írók számára a jeles érdemjegyet megajánljuk.

Amennyiben valaki, nagyon indokolt esetben, nem tud részt venni valamelyik zárthelyin, az az oktatónál Neptun-kóddal, elektronikusan, előre jelezve feljelentkezhet a pótlás időpontjára. Az ez időpont egyben arra is lehetőséget ad, hogy akinek a félév során nem sikerült elérnie a kívánt teljesítményt, az a korábban megírt dolgozatokat javíthatja.

Tételsor

A szóbeli vizsga tételsora lentebb olvasható. Ezek közül kap egyet a vizsgázó, akinek rövid felkészülés után önállóan, szóbal kell tudnia ismertetnie a tételben szereplő és a hozzájuk kapcsolódó fogalmakat.

  1. Alapfogalmak (kiértékelés, listák, currying, magasabbrendű függvények)
  2. Algebrai adattípusok (felsorolásos, paraméteres, rekurzív)
  3. Típusosztályok, parametrikus és ad-hoc polimorfizmus
  4. Magasabbrendű típusok, típuskonstruktor-osztályok, példák
  5. Monadikus programozás (Monad, return, >>=, >>), példák (State, Maybe, [])
  6. Generikus alaptípusok, típusok leképezése generikus típusokra (from, to), értékek ábrázolása generikus formában
  7. A generikus programozás módszere, a generikus egyenlőség mint példa
  8. Kindok, generikus map, map0, map1,... osztályok
  9. A Clean generikus nyelvi fogalmai, derive, példák
  10. iTask (kombinátorok, technikai modell, felület)

A beadandók/zh-k anyaga

  • első beadandó és zárthelyi: függvénydefiníciók, mintaillesztés, esetszétválasztás, rekurzió, listák, tömbök, listakifejezések, magasabbrendű függvények, lokális definíciók.
  • második beadandó és zárthelyi: a korábbiak, továbbá algebrai adattípusok, típusosztályok, generikus programozás.

A félév ütemezése

Első beadandó:

  •  2017. október 5. (csütörtök) 17:00 (nyitás)
  •  2017. október 19. (csütörtök) 17:00 (zárás)

Első zárthelyi:

  •  2017. október 20. (péntek), 17:00 — 19:00, Lovarda

Második beadandó:

  •  2017. november 16. (csütörtök) 17:00 (nyitás)
  •  2017. november 30. (csütörtök) 17:00 (zárás)

Második zárthelyi:

  •  2017. december 1. (péntek), 17:00 — 19:00, Lovarda

Zárthelyik pótlása, javítása:

  •  2017. december 15. (péntek), 16:00 — 18:00 (első zárthelyi), Adatbázis labor
  •  2017. december 15. (péntek), 18:00 — 20:00 (második zárthelyi), Adatbázis labor

Konzultáció

A kurzushoz tartoznak tanrendbe beosztott konzultációs alkalmak is, amelyek csütörtökönként 17:45 és 18:45 között, a 1-817 teremben vannak megtartva. A gyakorlati számonkérés szervezéséért felelős oktató természetesen szükség esetén elektronikus levélben is megkereshető:


Vissza az oktatói honlapra

Utolsó módosítás: 2017.09.25.