A tantárgy adatlapja
1. A képzési program adatai

1.1 Felsőoktatási intézmény	Babeș–Bolyai Tudományegyetem	
1.2 Kar 	Matematika és Informatika Kar	
1.3  Intézet	Magyar Matematika és Informatika Intézet	
1.4 Szakterület	Informatika	
1.5 Képzési szint	Alapképzés	
1.6 Szak / Képesítés	Informatika, információ-mérnöki	

2. A tantárgy adatai

2.1 A tantárgy neve	Logikai és Funkcionális Programozás Alapjai	
2.2 Az előadásért felelős tanár neve	Csató Lehel	
2.3 A szemináriumért felelős tanár neve	Csató Lehel	
2.4 Tanulmányi év	2	2.5Félév	1	2.6. Értékelés módja	kollokvium	2.7 Tantárgy típusa	kötelező – szak	

3. Teljes becsült idő (az oktatási tevékenység féléves óraszáma)

3.1 Heti óraszám	3	melyből: 3.2 előadás	2	3.3 szeminárium/labor	1	
3.4 Tantervben szereplő össz-óraszám	42	melyből: 3.5 előadás	28	3.6 szeminárium/labor	14	
A tanulmányi idő elosztása:	óra	
A tankönyv, a jegyzet, a szakirodalom vagy saját jegyzetek tanulmányozása	26	
Könyvtárban, elektronikus adatbázisokban vagy terepen való további tájékozódás	10	
Szemináriumok / laborok, házi feladatok, portofóliók, referátumok, esszék kidolgozása	30	
Egyéni készségfejlesztés (tutorálás)	14	
Vizsgák	3	
Más tevékenységek: ..................	0	
3.7 Egyéni munka össz-óraszáma	83	
3.8 A félév össz-óraszáma	125	
3.9 Kreditszám	5	

4. Előfeltételek (ha vannak)

4.1 Tantervi	Nincs	
4.2 Kompetenciabeli	Alap-programozási készségek, logikai alapok	

5. Feltételek (ha vannak)

5.1 Az előadás lebonyolításának feltételei	•	Az előadásokhoz video-projektor szükséges.
•	A példák kifejtéséhez tábla szükséges.	
5.2 A szeminárium / labor lebonyolításának feltételei	•	A laboratóriumi órák alatt a diákok a számítógépet, az oktató a táblát használja	

6. Elsajátítandó jellemző kompetenciák

Szakmai kompetenciák	•	Új programozási paradigmák elsajátítása
•	Betekintés a modern funkcionális programnyelvek jellegzetességeibe,
•	A logikai programnyelvek bemutatása,	
Transzverzális kompetenciák 	•	Feladatmegoldó készségek fejlesztése
•	Hatékony programkódok írása
•	Új programozási paradigmák elsajátítása;	

7. A tantárgy célkitűzései (az elsajátítandó jellemző kompetenciák alapján)

7.1 A tantárgy általános célkitűzése	•	A tantárgy célja a modern programozási paradigmák bemutatása.
•	A logikai programnyelveket nagy rendszerek specifikációjánál
használják. A specifikáció „kompilálása” új fogalom a diákok számára.
•	A funkcionális nyelvek más gondolkodási és programmegoldó sémákat követelnek, ezek elsajátítása a cél.	
7.2 A tantárgy sajátos célkitűzései

	•	Új programozási nyelvek bemutatása:
o	A logikai programozás: Prolog;
o	A funkcionális programozás: Haskell;
•	Az elsajátított programozási nyelvek és módszerek használatának körülményei;
•	A programozási technikák elemzése, érdekes feladatok programozása;
•	Programok formális jellemzése a lambda-kalkulus segítségével;	

8. A tantárgy tartalma

8.1 Előadás	Didaktikai módszerek	Megjegyzések	
1. hét
Imperatív és deklaratív nyelvek bemutatása, programozási módszerek ismertetése, a programkódok megértésének fokai. Bevezetés az imperatív programnyelvek családjába.	tanári magyarázat, 
rávezetés,
interaktív kódírás		
2. hét 
Logikai programozási alapfogalmak; szabályok és tények; szabad és kötött változók; a dedukció elve és a Prolog következtető mechanizmusa	tanári magyarázat, rávezetés, interaktív kódírás, munkáltatás		
3. hét
A cél-kifejezés fogalma Prolog-ban, azok kiértékelése, összetett predikátumok, backtracking, listák Prolog-ban.	tanári magyarázat, rávezetés, interaktív kódírás, munkáltatás		
4.hét
Mintaillesztés fogalma Prolog-ban, a mintaillesztés szabályai, aritmetikai műveletek, logikai műveletek.	tanári magyarázat, rávezetés, interaktív kódírás, munkáltatás		
5. hét
A Prolog rendszerben a negáció fogalma, atomok és összetett kifejezések felbontása, összetevése, kiértékelése.	tanári magyarázat, rávezetés, interaktív kódírás, munkáltatás, feladatok kitűzése		
6. hét
Rekurzív adatstruktúrák Prolog-ban. Fogalmak ismétlése és megerősítése.	tanári magyarázat, rávezetés, interaktív kódírás, munkáltatás, teszt-feladatok	A logikai fejezet végén egy felmérés, mely számít a félév-végi jegyben.	
7. hét
A funkcionális paradigma ismertetése, különböző funkcionális programnyelv bemutatása, összehasonlítások, funkcionális jellemzők a gyakran használt programnyelvekben	tanári magyarázat, rávezetés, munkáltatás		
8. hét
A Haskell nyelvelemei, típusok fogalma, a Haskell programozói környezet, rekurencia.	tanári magyarázat, rávezetés, interaktív kódírás, munkáltatás		
9. hét
Listakezelés Haskell-ben listák ábrázolása, listakonstruktorok.	tanári magyarázat, rávezetés, interaktív kódírás, munkáltatás		
10. hét 
Operátorok Haskell-ben, függvénytípusok, típusok levezetése, lambda-függvények.	tanári magyarázat, rávezetés, interaktív kódírás, munkáltatás		
11. hét
Bevezető a matematikai programmodellbe és a lambda-kalkulusba, példák a lambda-kalkulusra.	tanári magyarázat, rávezetés, interaktív kódírás, munkáltatás		
12. hét
Haskell példák a lambda-kalkulusra, elméleti kitekintő.	tanári magyarázat, rávezetés, interaktív kódírás, munkáltatás		
13. hét
A logikai és a funkcionális programmodellek ismétlése, következtetések és összefoglaló	tanári magyarázat, rávezetés, interaktív kódírás, munkáltatás, teszt-feladatok		
14. hét
Feladatok oldása, Kollokvium, Megoldások megbeszélése.	munkáltatás, teszt-feladatok	A kollokvium előtt alkalom lesz kérdésekre, a vizsga után megbeszéljük a feladatokat.	
Könyvészet
[1]. 	Serban G., Pop H.F. (2006) Elemente avansate de programare in Lisp si Prolog. Aplicatii in Inteligenta Artificiala, Editura Albastra.
[2]. 	Ásványi Tibor - ELTE - logikai programozás oldalai: Prolog.
[3]. 	Prolog könyv - letölthető Mike Spivey oldaláról,  (http://spivey.oriel.ox.ac.uk/mike/logic/index.html)
[4]. 	(***) Learn Prolog Now! (http://www.coli.uni-saarland.de/~kris/learn-prolog-now/)
[5]. 	Szeredi Péter és Benkő Tamás "Nagyhatékonyságú Logikai Programozás" 
[6]. 	(***) http://www.lpa.co.uk , Logikai Programozás jegyzet
[7]. 	Reede, C. (1989) Elements of Functional Programming, Addison Wesley.
[8]. 	Field A. (1988) Functional Programming, Addison Wesley, New York.
[9]. 	Horváth Zoltán (ELTE programnyelvek tanszék) Funkcionális programozás előadása.
[10]. 	Graham Hutton (2007) Programming in Haskell, Cambridge University Press.
[10]. 	Miran Lipovaca (2011) Learn you a Haskell for Great Good, No Starch Press, San Francisco.
	
8.2 Szeminárium / Labor	Didaktikai módszerek	Megjegyzések	
Szeminárium:			
NINCS			
Labor			
1. hét
Ismerkedés a PROLOG-gal, feladatok kitűzése	munkáltatás, individuális feladatok		
2. hét
Feladatok ellenőrzése, második feladatcsoport bemutatása	munkáltatás, individuális feladatok		
3. hét
Feladatok ellenőrzése, harmadik feladatcsoport bemutatása	munkáltatás, individuális feladatok		
4. hét
Feladatok ellenőrzése, Ismerkedés a HASKELL-lel	munkáltatás, individuális feladatok		
5. hét
Feladatok ellenőrzése, második feladatcsoport bemutatása	munkáltatás, individuális feladatok		
6. hét
Feladatok ellenőrzése, harmadik feladatcsoport bemutatása	munkáltatás, individuális feladatok		
7. hét
Feladatok ellenőrzése	munkáltatás, individuális feladatok		
Könyvészet	
-			

9. Az episztemikus közösségek képviselői, a szakmai egyesületek és a szakterület reprezentatív munkáltatói elvárásainak összhangba hozása a tantárgy tartalmával.

•	A logikai programozásba – a Prolog nyelven keresztül – történő bevezetés általános az informatika oktatásban (lásd pl. az Amsterdam-i egyetem, a budapesti ELTE és BME egyetemeken történő képzést)
•	A funkcionális programozásnál használt Haskell programnyelv egyike a legkisejlettebb modern funkcionális nyelveknek, melyet kutatásban és oktatásban egyaránt használnak (pl. St. Andrews-i Egyetem Skóciában, a Nijmegen-i Radboud egyetem, a budapesti ELTE, a BME egyetem).	

10. Értékelés

Tevékenység típusa	10.1 Értékelési kritériumok	10.2 Értékelési módszerek	10.3 Aránya a végső jegyben	
10.4 Előadás 	Parciális vizsga a félév felénél	Írásbeli vizsga	25%	
	Parciális vizsga a félév végén (vagy bemutató előadás)	Írásbeli vizsga	25%

+10%	
10.5 Labor	Programozási feladatok bemutatása és/vagy szemináriumi bemutató	A megoldások pontozása	50% 	
	Opcionális feladatok	A megoldások pontozása	+10%	
10.6 A teljesítmény minimumkövetelményei	
Az elvárt minimális tudás:

•	A logikai programozás fogalmainak ismerete, a backtracking alkalmazása, egyszerű Prolog program megírása.
•	A funkionális programozás alapfogalmainak az ismerete, a típusok ismerete, az absztrakt osztályok ismerete.

Az átmenő jegy feltételei:

•	Az évközi tevékenységre kötelező a pontok 60%-ának az összegyűjtése (minimum 24 pont; kizáró jellegű).
•	A laborokon történő jelenlét.
•	A vizsgán legkevesebb a pontok felének összegyűjtése (kizáró jellegű).
•	A végső pontszám minimálisan 70 (=5; kizáró jellegű).

Kitöltés dátuma			Előadás felelőse			Labor felelőse
2012.09.21				Csató Lehel				Csató Lehel

Az intézeti jóváhagyás dátuma				Intézetigazgató	
..........................						Szenkovits Ferenc