Budapest University of Technology and Economics, Faculty of Electrical Engineering and Informatics

    Belépés
    címtáras azonosítással

    vissza a tantárgylistához   nyomtatható verzió    

    Alkalmazott funkcionális és logikai programozás

    A tantárgy angol neve: Applied Functional and Logic Programming

    Adatlap utolsó módosítása: 2010. május 6.

    Budapesti Műszaki és Gazdaságtudományi Egyetem
    Villamosmérnöki és Informatikai Kar

    Gazdasági informatikus szak

    MSc képzés

    Tantárgykód Szemeszter Követelmények Kredit Tantárgyfélév
    VISZM100 2,4 3/0/2/v 6  
    3. A tantárgyfelelős személy és tanszék Dr. Szeredi Péter,
    4. A tantárgy előadója
    Név:

     

    Beosztás:

     

    Tanszék, Intézet:

     

    dr. Szeredi Péter, PhD

     

    docens

     

    Számítástudományi és Információelméleti Tanszék

     

    dr. Hanák Péter

     

    tud. munkatárs

     

    Irányítástechnika és Informatika Tanszék

     

    Patai Gergely

     

    ügyvivő szakértő

     

    Egészségügyi Mérnöki Tudásközpont

     

    5. A tantárgy az alábbi témakörök ismeretére épít Programozás

     

    6. Előtanulmányi rend
    Ajánlott:
    Kötelező: nincs.

     

    Ajánlott: a deklaratív programozás témakör ismerete.

     

    7. A tantárgy célkitűzése A deklaratív programozási paradigma áttekintése. A deklaratív programozás két fő területe, a funkcionális programozás (FP) és a logikai programozás (LP) alapjainak és alkalmazási területeinek megismertetése. A funkcionális és a logikai programozási paradigmák módszertanának és eszközrendszerének bemutatása. Kitekintés a funkcionális és a korlát-alapú logikai programozás pénzügyi alkalmazásaira és pénzügyi modellezési lehetőségeire.
    8. A tantárgy részletes tematikája

    1. Előadás: A deklaratív paradigma fő jellemzői: a program mint állítások halmaza, a program végrehajtása mint következtetési folyamat; mellékhatás-mentesség, komponálhatóság. A deklaratív nyelvek fő eszközei: egyszeres értékadás, rekurzió, faszerkezetű adatstruktúrák, mintaillesztés és egyesítés. A deklaratív programozási nyelvek pozícionálása, alkalmazási területei. Motiváló programozási példák bemutatása logikai és funkcionális nyelveken.
    Számítógépes labor: Ismerkedés az F# és Prolog programozási nyelvek fejlesztési környezetével, az előadáson bemutatott motiváló programozási példák futtatása, kisebb programozási feladatok megoldása.
    2. Előadás: Funkcionális programozás F# nyelven: literál, függvény, lambdakifejezés, változó, kötés, operátor, függvényalkalmazás, részleges függvényalkalmazás, minta, mintaillesztés, őr, függvénydefiníció, klóz, rekurzió, terminális rekurzió, akkumulátor, vezérlés, lista és listanézet, típus, típuslevezetés, ennes, rekord, unió, polimorf típus, rekurzív típus, aktív minta, kivételkezelés, lusta kiértékelés.
    Számítógépes labor: Listakezelő függvények programozása F# nyelven, listanézet ill. rekurzió használata, általános rekurzió átírása terminális rekurzióvá akkumulátorok segítségével.
    3. Előadás: Könyvtári F# függvények: aritmetika, ennes-függvények, konverziók, logikai operátorok, listakezelő függvények; magasabb rendű függvények, rekurziós minták.
    Számítógépes labor: Bináris és általános fastruktúrák defíniálása és alkalmazása F# nyelven, különböző adatelrendezések mellett. Rendezett fastruktúrák. Különböző bejárási algoritmusok.
    4. Előadás: Programszervezési eszközök az F# nyelvben: modul, névtér, szignatúra, érvényesség, láthatóság. Tervezési minták. Programok fordítása és futtatása. A fejlesztő környezet haladó lehetőségei.
    Számítógépes labor: Magasabb rendű függvények alkalmazása különféle adatstruktúrák feldolgozására, adatok akkumulálására. Egyszerű pénzügyi statisztikai feladatok megoldása.
    5. Előadás: Programozás F# nyelven: imperatív programozás (felülírható változó és rekord, unit és ref típus, tömb és tömbnézet, vezérlés), objektum-orientált programozás (operátor, objektum, osztály, esemény, interfész, öröklődés). .NET típusok és könyvtárak használata.
    Számítógépes labor: Több modulból álló F# nyelvű program tervezése és megvalósítása egy kis-közepes méretű pénzügyi feladat megoldására, pl. a piac napközbeni mozgásának  számítása témakörben.
    6. Előadás: Az F# nyelv tipikus alkalmazási területei a gazdasági informatikában, különös tekintettel a pénzügyi szektorra. Egy nagyobb feladat (pl. kereskedési statisztikák számítása traderekre es ügyfelekre lebontva) F# nyelven való megoldásának áttekintése.
    Számítógépes labor: Az előadáson ismertetett feladat egyes részeinek beprogramozása F# nyelven.
    7.  Előadás: Az FP nyelvek családjának áttekintése (ML, Erlang, Haskell, F#). Az FP nyelvek jellemző eszközei: típusok, listák és listanézetek, polimorfizmus, részleges függvényalkalmazás, magasabb rendű függvények, mohó és lusta kiértékelés.
    Számítógépes labor: Néhány korábban F# nyelven megoldott laborfeladat beprogramozása az ML, Erlang illetve Haskell nyelveken. A Haskell nyelv lusta kiértékelési mechanizmusának értékelése. 
    8. Előadás: Az LP nyelvek áttekintése: Prolog, korlát-programozás. Az LP nyelvek jellemző eszközei: predikátumok, klózok, nem-determinizmus, logikai változó, az egyesítés mint a mintaillesztés általánosítása.
    Számítógépes labor: Lista- ill. fastruktúra-kezelő eljárások programozása Prolog nyelven. A feladatok megoldása felsoroló ill. megoldásgyűjtő változatban.
    9. Előadás: A véges tartományú korlát-programozás (CLPFD) alapfogalmai: korlát-változók, korlátok, megoldási algoritmus. Alapvető korláttípusok: aritmetikai, logikai és halmazkorlátok, ezek alkalmazása.
    Számítógépes labor: Egyszerű korlátfeladatok megoldása, pl. térképszínezés, n-vezér, logikai feladványok. A korlátmegoldás folyamatának nyomkövetése.
    10. Előadás: A CLPFD feladatmegoldás folyamata: modellezés, korlátok, címkézés. A modellezés lépései: a korlátváltozók és tartományaik meghatározása, korlátok felvétele, redundáns korlátok. Alapvető címkézési módszerek.
    Számítógépes labor:  A CLPFD feladatmegoldás folyamatának bemutatása pl. a torpedó logikai feladvány példáján. Többféle modellezési lehetőség kipróbálása. A redundáns korlátok valamint a különböző címkézések hatásának értékelése.
    11. Előadás: A CLPFD technológia haladó lehetőségei: tükrözött és kombinatorikai korlátok, szélsőértékfeladatok címkézési módszerei, felhasználói korlátok definiálása. Alkalmazásspecifikus korlátok, pl. ütemezési feladatok megoldására.
    Számítógépes labor: Egy kombinatorikus pénzügyi optimalizálási feladat megoldása alapvető ill. alkalmazásspecifikus korlátokkal, a megoldások hatékonyságának összehasonlítása.
    12. Előadás: A valós tartományú korlát programozás (CLPR) áttekintése: lineáris és nemlineáris aritmetikai korlátok, megoldási módszerek (szimplex, branch-and-bound). Szélsőértékek számítása.
    Számítógépes labor: Jelzálogkölcsön modellezése, a modell többcélú felhasználása. Valós- és egészértékű lineáris optimalizációs feladatok megoldása.
    13. Előadás: A korlát-programozás tipikus alkalmazási területei a gazdasági informatikában, különös tekintettel a pénzügyi szektorra. Egy összetettebb pénzügyi feladat (pl. beruházás gazdaságosságának értékelése) modellezése korlát-programozási eszközökkel.
    Számítógépes labor: Az előadáson ismertetett feladat egyes részeinek beprogramozása CLPFD ill. CLPR környezetben.
    14. Előadás: Kitekintés: a deklaratív nyelvek jövője, programok megbízhatósága, programhelyesség-bizonyítás, többmagos, többprocesszoros végrehajtás, várható alkalmazási lehetőségek.
    Számítógépes labor: Az előző heti programozási feladat folytatása. A félévi munka értékelése.

     

     

    9. A tantárgy oktatásának módja (előadás, gyakorlat, laboratórium) Előadás és laboratórium

     

    10. Követelmények

    •A szorgalmi időszakban: 3-3 kis házi feladatot adunk ki az F#, illetve a korlát-programozási  témakörből. Az aláírás feltételei:
          •részvétel a laboratóriumi gyakorlatok 70 százalékán;
          •a kis házi feladatok kétharmadának megoldása úgy, hogy a megoldott kis házi feladatok között mindkét témakörből legalább egy-egy szerepeljen.

    •A vizsgaidőszakban: írásbeli feladatmegoldással kombinált szóbeli vizsga legalább 40%-os teljesítése.

    11. Pótlási lehetőségek A laboratóriumi gyakorlatok pótlására nincs lehetőség. A kis házi feladatok pótlása a pótlási időszak végéig lehetséges.

     

    12. Konzultációs lehetőségek A tárgy előadóival személyes konzultációra van lehetőség, előre egyeztetett időpontban.

     

    13. Jegyzet, tankönyv, felhasználható irodalom •Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi: How to Design Programs. MIT Press, 2001. ISBN-10: 0-262-06218-6, ISBN-13: 978-0-262-06218-3. On-line olvasható: <http://htdp.org>
    •Robert Pickering: Beginning F# . Apress, 2009. ISBN-13 (paperback): 978-1-4302-2389-4, ISBN-13 (electronic): 978-1-4302-2390-0
    •Chris Smith: Programming F#. O’Reilly, 2010. ISBN: 978-0-596-15364-9
    •Szeredi Péter, Benkő Tamás: Deklaratív programozás. Oktatási segédlet. Bevezetés a logikai programozásba. Számítástudományi és Információelméleti Tanszék, Budapest, 2005
    •Krzysztof R. Apt, Mark Wallace: Constraint Logic Programming using Eclipse. Cambridge University Press; January 2007. ISBN 978-0521866286
    14. A tantárgy elvégzéséhez átlagosan szükséges tanulmányi munka
    Kontakt óra70
    Félévközi készülés órákra14
    Felkészülés zárthelyire 
    Házi feladat elkészítése24
    Kijelölt írásos tananyag elsajátítása 
    Vizsgafelkészülés72
    Összesen180
    15. A tantárgy tematikáját kidolgozta
    Név:

     

    Beosztás:

     

    Tanszék, Intézet:

     

    dr. Szeredi Péter, PhD

     

    docens

     

    Számítástudományi és Információelméleti Tanszék

     

    dr. Hanák Péter

     

    tud. munkatárs

     

    Irányítástechnika és Informatika Tanszék

     

    Patai Gergely

     

    ügyvivő szakértő

     

    Egészségügyi Mérnöki Tudásközpont