1 Bevezetés a funkcionális programozásba 2009.

Slides:



Advertisements
Hasonló előadás
Deduktív adatbázisok.
Advertisements

Elemi algoritmusok Páll Boglárka.
„Esélyteremtés és értékalakulás” Konferencia Megyeháza Kaposvár, 2009
Hotel Eger Park Konferenciaközpont október
Weblap szerkesztés HTML oldal felépítése Nyitó tag Záró tag Nyitó tag Záró tag oldalfej tözs.
Hatékonyságvizsgálat, dokumentálás
Hotel Eger Park Konferenciaközpont október
Grafikus tervezőrendszerek programozása 2. előadás.
Humánkineziológia szak
Online Katalógus aleph.nyf.hu.
Funkcionális programozás F#-ban
Műveletek logaritmussal
Számítástechnika Levelezőknek
3. Folytonos wavelet transzformáció (CWT)
Rekurzió (Horváth Gyula és Szlávi Péter előadásai felhasználásával)
Euklidészi gyűrűk Definíció.
Gyűrűk Definíció. Az (R, +, ·) algebrai struktúra gyűrű, ha + és · R-en binér műveletek, valamint I. (R, +) Abel-csoport, II. (R, ·) félcsoport, és III.
4. VÉGES HALMAZOK 4.1 Alaptulajdonságok
Programozási alapismeretek 8. előadás. ELTE 2/  További programozási tételek További programozási tételek 
Alhálózat számítás Osztályok Kezdő Kezdete Vége Alapértelmezett CIDR bitek alhálózati maszk megfelelője A /8 B
Bevezetés a Java programozásba
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Rangsorolás tanulása ápr. 24..
Mérés és adatgyűjtés laboratóriumi gyakorlat Makan Gergely, Mingesz Róbert, Nagy Tamás 2. óra szeptember 9., 10. v
Fejlett programozási technikák II.
Követelmények Bevezetés a Javába Első java program írása Dokumentációk
Metal/plastic foam projekt
Táblázatkezelés alapjai MS Excel, OpenOffice Calc
Dr. Szalka Éva, Ph.D.1 Statisztika II. VII.. Dr. Szalka Éva, Ph.D.2 Mintavétel Mintavétel célja: következtetést levonni a –sokaságra vonatkozóan Mintavétel.
LabView használata PTE PMMK MIT Nagyváradi Anett
Pázmány - híres perek Pázmány híres perek.
Mindennap egy ablakot kinyitni és a kellemes meglepetést élvezni.
Valós számok Def. Egy algebrai struktúra rendezett test, ha test és rendezett integritási tartomány. Def. Egy (T; +,  ;  ) rendezett test felső határ.
Kliensoldali Programozás
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
Szántai János ügyvezető - FOK Nonprofit Kft.
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
1 Matematikai Analízis elemei dr. Szalkai István Pannon Egyetem, Veszprém nov. 08.
Tömbök Csernoch Mária.
szakmérnök hallgatók számára
Funkcionális programozás 2. gyakorlat
Grafikus tervezőrendszerek programozása 8. előadás.
Összetett adattípusok a Pascal nyelvben
Programozási nyelvek.
Készítette: Gocsál Ákos, Gocsál Klára, Fehér Péter 1 A program megvalósulását az Apertus Közalapítvány támogatta. Internet az oktatásban – taneszközök.
Bevezetés a PRADO keretrendszerbe Kardos Gergely.

1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
AAO Csink László november.
1 AAO folytatás ++ Csink László. 2 Rekurzív bináris keresés (rendezett tömbben) public static int binker(int[] tomb, int value, int low, int high) public.
Komplex dinamikus rendszerek vizualizációja a XaoS fraktálkészítő programmal Kovács Zoltán Szegedi Tudományegyetem Bolyai Intézet, Analízis Tanszék.
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Java programozási nyelv Metódusok
Határozatlan integrál
Objektum orientált programozás
Az informatika logikai alapjai
Logikai programozás. ISMÉTLÉS Fibonacci sorozat: a/ fibonacci(1,1). fibonacci(2,1). fibonacci(N,F) :- N > 1, N1 is N - 1, N2 is N - 2, fibonacci(N1, F1),
Logika szeminárium Előadó: Máté András docens Demonstrátorok:
Nemrekurzív programozás ÜA LISP tartalmaz nemrekurzív eszközöket is, mivel azonban funkcionális nyelv, ezeket is függvényként használhatjuk. ÜSokszor a.
Programozási alapismeretek 8. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/  További programozási.
előadások, konzultációk
Algoritmizálás, adatmodellezés
1 Függvények használata – az első függvénynél a formulát háromszor be kell írni, rendre az x, x+h, x-h argumentumokkal, – a második függvénynél az új (feltételes.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
Készítette: Weigel Szilvia számítástechnika szak III. évfolyam, Budapest – ADU A Logo programozási nyelv X.
Script nyelvek előadás
Logika szeminárium Barwise-Etchemendy: Language, Proof and Logic
Beépített függvények használata programozáskor
Előadás másolata:

1 Bevezetés a funkcionális programozásba 2009

2 DrScheme A funkcionális programozást egy DrScheme nevű kevert – azaz imperatív és funkcionális elemeket is tartalmazó – nyelven keresztül mutatjuk be. Szabadon letölthető: A következőkben a funkcionális mag bemutatására koncentrálunk.

3 A nyelvi környezet Definitions window Itt definiáljuk a függvényeket Interactions window Itt történik a futtatás

4 (define (negyzet n) ( * n n) ) (define nagy-szam ( + (expt 2 10) (expt 3 100))) ---- > (negyzet 5) 25 > nagy-szam Példák

5 A nyelv szintjei DrScheme a nyelvi szintek hierarchiáját nyújtja: Beginning student: functions, structures, lists Intermediate student Advanced student Scheme language level Minden szint a hibaüzeneteket a szintnek megfelelően fogalmazza meg. A szintek a szintaktikus és szemantikus korlátozásokban eltérnek, a felhasználó szintje szerint.

6 Példa egy függvényre (define fac (lambda (n) (if (= n 0) 1 (* n (fac (- n 1))))))

7 A DrScheme nyelv vázlatos ismertetése 1. A Scheme program függvénydefiníciók halmaza, melyeket egymásba lehet ágyazni A Scheme program végrehajtása egy kifejezés kiértékelését jelenti A függvényeket (fvnev argumentumok) formában kell írni, például +3 (* 4 5)) ;; * 5 (fac 3) ;; fac(3) Az összeadás lehet több argumentumú ( ) ;; 10 A szorzás is lehet több argumentumú (/ ) ;; 3

8 A DrScheme nyelv vázlatos ismertetése 2. Listák: (length ‘(+ 2 3)) ;; 3 length beépített függvény, (+ 2 3) egy 3- elemű lista, a ‘ megakadályozza a kiértékelést: (+ 2 3) ;; 5 ‘(+ 2 3) ;; (+ 2 3)

9 cons car cons (construct szóból) Beépített függvény, két argumentuma van és egy rendezett párt vagy listát ad vissza: (cons '1 '2) ;; (1. 2) (cons '1 '(2 3 4)) ;; ( ) (cons '(1 2 3) '(4 5 6)) ;; ((1 2 3) 4 5 6) car rendezett pár vagy lista első elemét adja vissza (car '( )) ;; 123 (car '(egy ketto harom) ;; egy

10 cdr list cdr a rendezett pár második elemét; vagy a lista fej nélküli részét szolgáltatja: (cdr '(7 6 5)) ; (6 5) (cdr '(5. 16)) ; 16 listaelem!! (cdr '(5 26)) ; (26) lista!! (cdr '(it rains every day)) ;; (rains every day) (cdr (cdr '(a b c d e f))) ;; (c d e f) list készít egy listát a listaelemekből: (list 'a) ; (a) (list 'a 's 'd) ; (a s d) (list '(a b c) '(d e f) '(g h i)) is ((a b c)(d e f)(g h i))

11 cons és list különbsége: 1. (cons ’1 ’2) ; (1. 2) 2. (list '1 '2) ; (1 2) 3. (cons '(3 4) '(5 6)) ; ((3 4) 5 6) 4. list '(3 4) '(5 6)) ; ((3 4) (5 6))

12 length reverse append 1. (length '( )) ; 5 2. (length '(( ) (7 8 9))) ; 2 3. (reverse '( 1 2 3)) ; (3 2 1) 4. (append '(1 2) '( )) ; ( )

13 Trükkök 1. (append '(a b c) '()) 2. (list '(a b c) '() ) 3. (cons '(a b c) '() ) A. ((a b c) ) B. (a b c) C. ((a b c) ()) Scheme kód Lehetséges eredmények Párosítás? Kattintson ide!

14 A megfejtés 1 – B 2 – C 3 - A

15 Gyakorlat… (car '(minden x (if (ember x) (halando x)))) minden (car (car (cdr (cdr '(minden x (if (ember x) (halando x))))))) ha (car (car (cdr(car (cdr (cdr '(minden x (if (ember x) (halando x))))))))) ember Tekintsük a (minden x (ha (ember x) (halando x))) listát, és adjuk meg a Scheme kódot, ami a minden, ha illetve ember szavakat előállítja!

16 Lambda kifejezések A felhasználó által definiált függvények névvel nem rendelkező ún. lambda kifejezéseket használnak: (lambda (formális paraméter) kifejtés) Példa: ((lambda (x) ( * x x)) 3) ; 9 ((lambda (x y) (+ x y)) 3 4) ; 7

17 Fibonacci sorozat (define fib (lambda (n) (if (= n 0) 0 (if (= n 1) 1 (+ (fib (- n 1)) (fib (- n 2)))))))

18 Lnko (=gcd) (define gcd (lambda (a b) (if (= a b) a (if (> a b) (gcd (- a b) b) (gcd a (- b a))))))

19 Ackermann-függvény m\nm\n01234n n (n + 3) − (n + 3) − − 3A(3, − 3)A(3, A(4, 3)) A(4, 65533)A(4, A(5, 1))A(4, A(5, 2))A(4, A(5, 3)) 6A(5, 1)A(5, A(5, 1))A(5, A(6, 1))A(5, A(6, 2))A(5, A(6, 3))

20 x helyébe m-t, y helyébe n-t írva: (define ack (lambda (m n) (if (= m 0) (+ n 1) (if (= n 0) (ack (- m 1) 1) (ack (- m 1) (ack m (- n 1)))))))

21 Kiszámíthatóság Az Ackermann függvény példa a kiszámítható, de nem primitíven kiszámítható függvényre. A kiszámíthatóság elméletével nem foglalkozunk (ld. Haladó algoritmusok tárgy).

22 Listaelemek összeadása (define sum (lambda (lt) (if (null? lt) 0 (+ (car lt) (sum (cdr lt)))))) Futtatási példa: (sum '( )) ; 15

23 Listaelemek szorzata (define szoroz (lambda (lt) (if (null? lt) 1 (* (car lt) (szoroz (cdr lt))))))

24

25 Felhasznált irodalom index.html index.html