K-INFO
HU
EN
Belépés

Alkalmazott funkcionális és logikai programozás

Applied Functional and Logic Programming
A tantárgyleírás hatályossága
Hatályosság kezdete:
2026. March 21.
Hatályosság vége:
Tantárgy neve (magyarul, angolul)
Alkalmazott funkcionális és logikai programozás
Applied Functional and Logic Programming
Tantárgykód BMEVISZM100
Tantárgyjelleg
Képzési szint
Kurzustípusok és óraszámok (heti/féléves)
Kurzustípus elmélet gyakorlat laboratóriumi gyakorlat
óraszám (heti) 3 0 2
jelleg (kapcsolt/önálló) kapcsolt
Tanulmányi teljesítmény/értékelés típusa vizsga
Tantárgy kreditértéke 6
Tantárgyfelelős
Dr. Szeredi Péter
Tantárgyat gondozó oktatási szervezeti egység
Számítástudományi és Információelméleti Tanszék
Kar Villamosmérnöki és Informatikai Kar
Tantárgy weboldala
Tantárgy elsődleges mintatantervi jellege
Közvetlen előkövetelmények – Erős előkövetelmény nincs
Közvetlen előkövetelmények – Gyenge előkövetelmény nincs
Közvetlen előkövetelmények – Párhuzamos előkövetelmény nincs
Közvetlen előkövetelmények – Mérföldkő előkövetelmény nincs
Közvetlen előkövetelmények – Kizáró feltétel nincs

Célkitűzés

Tantárgyprogram

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.

 

 

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.

Tanulmányi eredmények

Ez a tantárgy a KKK rendeletben meghatározott, következő kompetenciák fejlesztését szolgálja:

Tudás

Nincsenek rögzített tanulási eredmények.

Képességek

Nincsenek rögzített tanulási eredmények.

Attitűd

Nincsenek rögzített tanulási eredmények.

Autonómia és felelősség

Nincsenek rögzített tanulási eredmények.

Oktatási módszertan

Előadás és laboratórium  

Tanulástámogató anyagok

Online források
•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ó:; •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

A tantárgy teljesítéséhez ajánlott előzetes ismeretek

Tudás típusú kompetenciák
(azon előzetes ismeretek összessége, amelyek megléte nem kötelező, de a tantárgy eredményes teljesítését nagyban elősegíti)
Programozás  
Képesség típusú kompetenciák
(azon előzetes képességek és készségek összessége, amelyek megléte nem kötelező, de a tantárgy eredményes teljesítését nagyban elősegíti)
nincs
Ajánlott (nem kötelező) előzetesen megszerzendő kompetenciák
(azon ajánlott (nem kötelező) előzetesen megszerzendő kompetenciák összessége, amelyek jelentősen hozzájárulnak a tantárgy eredményes teljesítéséhez)
Programozás  
Általános szabályok
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. 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. 
Teljesítményértékelési módszerek
Szorgalmi időszakban végzett teljesítményértékelések részletes leírása

Nincs megadva részletes értékelés.

Szorgalmi időszakban végzett teljesítményértékelések részaránya

Nincs megadva részarány.

Vizsgaidőszakban végzett teljesítményértékelések részletes leírása

Nincs megadva részletes értékelés.

Vizsgarészek részaránya

Nincs megadva részarány.

Érdemjegy megállapítása

Nincs megadva érdemjegy határ.

Jelenléti és részvételi követelmények

Nincs megadva jelenléti követelmény.

Javítás, ismétlés és pótlás különös szabályai

Nincs megadva.

Rövid leírás

Nincs megadva.

Részletes leírás

Nincs megadva.

Ajánlott tantárgyak
Kötelező: nincs.  Ajánlott: a deklaratív programozás témakör ismerete.  
A tantárgy elvégzéséhez szükséges tanulmányi munka

Nincs megadva munkaidő bontás.

Tantárgykövetelmények hatályossága
Tantárgykövetelmények hatályosságának kezdete:
Tantárgykövetelmények hatályosságának vége:
Tantervi elhelyezés

Nincsenek rögzített tantervi elhelyezések ehhez a tárgyverzióhoz.