Ennek a tantárgynak az a célja, hogy a Haskell tisztán funkcionális programozási nyelv eszközein keresztül hozzájáruljon a napjainkban alkalmazott funkcionális programozási technikák elsajátításához, illetve gyakorlati példák segítségével rávilágítson azoknak alkalmazási lehetőségeire.

Irodalom

Az anyag elsajátításához a következő könyvek javasoltak, az előadáson szereplő témák részletesebben ezekben tanulmányozhatóak.

  • B. O'Sullivan, D. Stewart, J. Goerzen. Real World Haskell, 1st Edition. O'Reilly Media, November 2008. (online)

  • P. Hudak. The Haskell School of Expression, 1st Edition. Cambridge University Press, February 2000.

  • J. Gibbons, O. de Moor. The Fun of Programming (Cornerstones of Computing). Palgrave Macmillan, June 2005.

  • G. Hutton. Programming in Haskell. Cambridge University Press, 2007.

  • S. Thompson. Haskell: The Craft of Functional Programming, 3rd Edition. Addison-Wesley, June 2011.

  • M. Lipovaca. Learn You a Haskell for Great Good! -- A Beginner's Guide. No Starch Press, April 2011. (online)

  • S. Marlow. Parallel and Concurrent Programming in Haskell, 1st Edition. O'Reilly Media, August 2013. (online)

Ajánlott irodalom

Ezek a cikkek segíthetnek még a fentebb említett könyveken kívül az egyes anyagrészek alaposabb megértésében.

  • B. Yorgey. Typeclassopedia. September 2013. (online)

  • G. Huet. Functional Pearl: The Zipper. Journal of Functional Programming 7:5, pp. 549–554, 1997.

  • C. Okasaki. Purely Functional Data Structures. Cambridge University Press, 1998.

  • R. Hinze, R. Paterson. Finger Trees: A Simple General-purpose Data Structure. Journal of Functional Programming 16:2, pp. 197–217, 2006.

  • O. Kiselyov. Iteratees. FLOPS Proceedings, Springer's LNCS 7294, pp. 166-181, 2012.

  • J. Gibbons. Functional Programming for Domain-Specific Languages. tutorial, Domain-Specific Languages Summer School (DSL2013), Cluj Napoca, Romania, July 8-20, 2013.

  • A. Gill. Type-Safe Observable Sharing in Haskell. Proceedings of the 2009 ACM SIGPLAN Workshop on Haskell (Haskell '09), pp. 117-128, 2009.

  • T. Sheard, S. Peyton Jones. Template Meta-Programming for Haskell. ACM SIGPLAN 2002 Haskell Workshop 3, October 2002.

  • G. Mainland. Why It's Nice to be Quoted: Quasiquoting for Haskell. Proceedings of the 2007 ACM SIGPLAN Workshop on Haskell (Haskell '07), September 2007.

  • P. Wadler. How to Declare an Imperative. ACM Computing Surveys, 29(3):240—263, September 1997.

  • G. Patai. Efficient and Compositional Higher-Order Streams. Proceedings of the Functional and Constraint Logic Programming - 19th International Workshop (WFLP 2010), Madrid, Spain, January 17, 2010.

További hasznos linkek

A "Funkcionális programozás" (BSc) tárgy gyakorlati anyaga
Haskell Wiki
Haskell Platform
Hoogle

Órai jegyzet (2016/2017 tavasz)

(Ide kerülnek fel folyamatosan az előadások anyagai.)

  1. előadás: Bevezetés, funktorok (forráskódok)
  2. előadás: Funktorok, applikatív funktorok, monádok (forráskódok)
  3. előadás: Monádok, do szintaktika, példák monádokra (forráskódok)
  4. előadás: Monádtranszformátorok, tulajdonságalapú tesztelés (forráskódok)
  5. előadás: Tulajdonságalapú tesztelés (forráskódok)
  6. előadás: Konkurens programozás (forráskódok)
  7. előadás: Konkurens programozás, párhuzamos programozás (forráskódok)
  8. előadás: Párhuzamos programozás (forráskódok)
  9. előadás: Tisztán funkcionális adatszerkezetek (forráskódok)
  10. előadás: Tisztán funkcionális adatszerkezetek (forráskódok)
  11. előadás: Hatékony Input/Output (forráskódok)
  12. előadás: Beágyazott nyelvek (forráskódok)

Számonkérés

A tárgy kollokvium, amelyhez szóbeli vizsga tartozik. Ennek tételsora lentebb olvasható.

A vizsgázás előfeltételeként a félév során teljesíteni kell még két beadandó feladatot. Ezek az előadáson elhangzott témákhoz 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 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 beadott és elfogadott megoldások mindegyikét egy-egy zárthelyi dolgozat megírásával lehet megvédeni. Ezek a dolgozatok feleletválasztós tesztek, amelyekből együtt számtani átlagban legalább 50%-os eredményt kell elérni a vizsgázáshoz. A kiemelkedő eredményt elérő hallgatók pedig jeles érdemjegyet szerezhetnek külön vizsgázás nélkül.

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. Ez az 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, a rosszul sikerült dolgozatokat javíthatja. (Csak javítani lehet.)

Segédlet a beadandókhoz

A beadandók írásához az oldal részeként elérhető egy segédlet, amely az Atom szövegszerkesztő használatát, valamint annak Haskell fejlesztői környezetként való alkalmazását mutatja röviden be.

Tételsor

  1. Funktorok, applikatív funktorok. (Funktorok és applikatív funktorok definíciója, jellemzői, szinktaktikai elemzés mint példa az alkalmazásra.)
  2. Monádtípusok, monádtranszformátorok. (Az Identity, Reader, State, Writer monádok, kapcsolódó típusosztályok, monádok kombinálása és rétegelése, példák.)
  3. Tulajdonság alapú tesztelés. (Programtulajdonságok, a QuickCheck előnyei, működési elve, felépítése és használata, Gen, Arbitrary, Property, példák.)
  4. Konkurens programozás. (Szálak létrehozása, kommunikáció szálak között: MVar és TVar, aszinkron kivételek, az STM monád és alkalmazása, példák.)
  5. Párhuzamos programozás. (Jellemzők, Weak Head Normal Form és jelentősége, az Eval monád, stratégiák, statikus/dinamikus particionálás, adatfolyamok, a Par monád.)
  6. Tisztán funkcionális adatszerkezetek (1). (Perzisztencia, differencialisták ábrázolása és működési elve, a zipper definíciója és alkalmazása.)
  7. Tisztán funkcionális adatszerkezetek (2). (A fingertree viselkedése, jellemzői, alkalmazása.)
  8. Hatékony input/output. (A lazy és strict ByteString típus, ByteString.Builder, előnyök, megvalósítás, műveletek, az Iteratee és Enumerator megadásának és használatának bemutatása.)
  9. Beágyazott nyelvek (1). (Mély és sekély beágyazás funkcionális nyelven magasabbrendű függvényekkel, lustasággal, előnyök, hátrányok, példák.)
  10. Beágyazott nyelvek (2). (Nyelvek beágyazása algebrai típusokkal, GADT-k, HOAS, Template Haskell és alkalmazása.)

A félév ütemezése

Első beadandó:

  •  2017. március 9. (csütörtök) 17:00 (nyitás)
  •  2017. március 23. (csütörtök) 17:00 (zárás)

Első zárthelyi:

  •  2017. március 24. (péntek), 17:00 — 17:45, Lovarda

Második beadandó:

  •  2017. április 20. (csütörtök) 17:00 (nyitás)
  •  2017. május 4. (csütörtök) 17:00 (zárás)

Második zárthelyi:

  •  2017. május 5. (péntek), 17:00 — 17:45, Lovarda

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

  •  2017. május 19. (péntek), 18:00 — 18:45 (első zárthelyi), Lovarda
  •  2017. május 19. (péntek), 19:00 — 19:45 (második zárthelyi), Lovarda

Konzultáció

A kurzushoz tartoznak tanrendbe beosztott konzultációs alkalmak is, amelyek csütörtökönként 13:00 és 14:00 között, a D-7.103 (Andreanszky Gábor) teremben lesznek megtartva. A gyakorlati számonkérés szervezéséért felelős oktatók természetesen szükség esetén elektronikus levélben is megkereshetőek:


Vissza az oktatói honlapra

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