FUNKCIONÁLIS PROGRAMOZÁS GYAKORLAT JEGYZET



Hasonló dokumentumok
FUNKCIONÁLIS PROGRAMOZÁS ELŐADÁS JEGYZET

2019, Funkcionális programozás. 5. el adás. MÁRTON Gyöngyvér

2016, Funkcionális programozás

2018, Funkcionális programozás

Funkcioná lis prográmozá s Start

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

Tulajdonságalapú tesztelés

2019, Funkcionális programozás. 4. el adás. MÁRTON Gyöngyvér

2016, Funkcionális programozás

2018, Funkcionális programozás

FUNKCIONÁLIS PROGRAMOZÁS

2018, Funkcionális programozás

2018, Funkcionális programozás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Funkcionális Nyelvek 2 (MSc)

2018, Funkcionális programozás

Kifejezések. Kozsik Tamás. December 11, 2016

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

Aritmetikai kifejezések lengyelformára hozása

Funkcionális programozás

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

LEGO robotok. XII. rész

Objektumorientált Programozás III.

ABSZTRAKCIÓ FÜGGVÉNYEKKEL (ELJÁRÁSOKKAL)

C# gyorstalpaló. Készítette: Major Péter

Operációs Rendszerek II. labor. 2. alkalom

Kifejezések. Kozsik Tamás. December 11, 2016

Programozás alapjai. 5. előadás

ADATBÁZISOK I. Az esetleges hibákat kérlek a csongor@csongorbokay.com címen jelezd! Utolsó módosítás: március 20.

Adatbáziskezelés. SQL parancsok. Függvények

HASKELL. Tartalom előadás

Tartalom előadás

Funkcionális nyelvek (egyetemi jegyzet) Páli Gábor János

Java II. I A Java programozási nyelv alapelemei

Tisztán funkcionális adatszerkezetek

Szkriptnyelvek. 1. UNIX shell

Doktori értekezés. Diviánszky Péter 2012.

PROGRAMOZÁS MÓDSZERTANI ALAPJAI I. TÉTELEK ÉS DEFINÍCIÓK

Programozás burritokkal

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

A Feldspar fordító, illetve Feldspar programok tesztelése

BASH SCRIPT SHELL JEGYZETEK

Adatbázisok* tulajdonságai

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

az Excel for Windows programban

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 3. előadás

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Táblázatkezelés 2. előadás. Alapok (folyt.)

Feldspar: Nyelv digitális jelfeldolgozáshoz

Algoritmizálás és adatmodellezés tanítása 1. előadás

Algoritmusok Tervezése. 4. Előadás Visual Basic 1. Dr. Bécsi Tamás

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

1. Gyakorlat. Rövid elméleti összefoglaló. <tárolási osztály>típus <típus > változónév <= kezdőérték><, >;

Lineáris belsőpontos Newton-iteráció

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

XPath. dr. Paller Gábor. XML technológiák

Kifejezések. A programozás alapjai előadás. Operátorok. Kifejezések. Operátorok precedenciája. Operátorok precedenciája

Komputeralgebra Rendszerek

Programozási nyelvek (ADA)

További vezérlő valamint számításokat megkönnyítő szerkezetek

Programozás 3. Dr. Iványi Péter

Java II. I A Java programozási nyelv alapelemei

Programozási nyelvek Java

Tisztán funkcionális adatszerkezetek (folytatás)

Microsoft Excel 2010

SZÁMÍTÁSOK A TÁBLÁZATBAN

Gyakorló feladatok Gyakorló feladatok

Algoritmusok Tervezése. 1. Előadás MATLAB 1. Dr. Bécsi Tamás

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

A TANTÁRGY ADATLAPJA

SZÁMÍTÓGÉPES ADATFELDOLGOZÁS

Oktatási segédlet 2014

Bevezetés a programozásba

Programozási nyelvek 6. előadás

ANALÍZIS III. ELMÉLETI KÉRDÉSEK

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

BASH script programozás II. Vezérlési szerkezetek

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

Az alábbi kód egy JSON objektumot definiál, amiből az adtokat JavaScript segítségével a weboldal tartalmába ágyazzuk.

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

Formális szemantika. Kifejezések szemantikája. Horpácsi Dániel ELTE Informatikai Kar

LUSTA KIÉRTÉKELÉS, LUSTA LISTA

Komputeralgebra Rendszerek

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

Programozási nyelvek a közoktatásban alapfogalmak I. előadás

Programok értelmezése

PROGRAMOZÁSI NYELVEK - CPP. ELŐADÁS JEGYZET

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

MODELLEK ÉS ALGORITMUSOK ELŐADÁS

Készítette: Nagy Tibor István

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

INFORMATIKA. PRÓBAÉRETTSÉGI május KÖZÉPSZINT. Pontozási és javítási útmutató

length (s): Az s karaklerlánc hossza, substr(s,m,n): Az s mezőben levő karakterláncnak az m-edik karakterétől kezdődő, n darab karaktert vágja ki.

Átírás:

FUNKCIONÁLIS PROGRAMOZÁS GYAKORLAT JEGYZET Szerkesztette: Balogh Tamás 2013. május 17. Ha hibát találsz, kérlek jelezd a info@baloghtamas.hu e-mail címen! Ez a Mű a Creative Commons Nevezd meg! - Ne add el! - Így add tovább! 3.0 Unported Licenc feltételeinek megfelelően szabadon felhasználható. 1

Adatok: Név: Diviánszky Péter E-mail: divip@aszt.inf.elte.hu Webolal http://www.people.inf.elte.hu/divip Szobaszám: D 2.616 Konzultáció: Csütörtök 14:00-15:00, elötte e-mailt írni, vagy a szobájához menni 1. Gyakorlat Haskell Leggyakrabban használt Haskell értelmezők a GHCi és a Hugs. Típus :t paranccsal lehet lekérdezni a típusát. :: "típusnév" paranccsal lehet korlátozni a típusát. Néhány számtípus Integer: egész szám Int: korlátozott egész szám Rational: racionális szám Double: dupla pontosságú lebegőpontos szám Pl.: (Num a) => a -> a-> a A => jobb oldalán lévő rész az argumentumok típusa, a bal oldalon lévő pedig a megszorítás. (/) :: Fractional a =>a-> a-> a. Ebből következik, hogy a csak Fractional típusosztályba tartozhat. Három különböző hatvány művelet létezik: (^) :: (Integral b, Num a)=>a -> b -> a (^^) :: (Fractional a, Integral b)=>a -> b -> a (**) :: Floating a => a -> a -> a Típuskikövetkeztetés 1 + 2 :: Int -> 1 és 2 is Int volt A következö két kifejezésben az eredmény Int típusú lesz: "1 * 5 ::Int" "(1 :: Int)* 5" A különbség az, hogy míg az első kifejezésben az eredményből következetí ki, míg a másodikban 1-esből. Zárójelezés Operátorok precedenciája ^, ^^, ** *, / +, - ==, /=, <, <=, >, >= && Zárójelezésük (...()) (()..) (()..) - (...()) (...()) Az infix módon használt div és mod kötési erőssége ugyanaz, mint a * és / operátoroké. 2

2. Gyakorlat Kerekítés truncate nulla fele kerekítés round legközelebbihez kerekítés ceiling felfele kerekítés floor lefele kerekítés Enum osztály toenum :: Enum a =>Int-> a fromenum :: Enum a =>a -> Int 4. Gyakorlat Függvények Függgvénydefiníció Module First where Ha ezután nem írunk semmit, akkor includeolja a Prelude-ot. 5. Gyakorlat Mintaillesztés Függvényalternatívák száma: 1, 2, 3,... Listák A függvényparaméterek nem változók, hanem általában minták. Egy minta illeszkedhet egy kifejezésre. Az első illeszkedő alternatívát választjuk kiértékeléskor. Alapvető listaműveletek!! n operátor az n operendussal visszaadja lista n-edik elemét(0-tól indexelődik a lista). : operátor hozzáfűz egy elemet a lista elejére. ++ operátor két listát összefűz. head függvény visszaadja a lista első elemét. tail függvény visszaadja a lista nem első elemét. 6. Gyakorlat Rekurzió sum [] = 0 sum (x:xs) = x + sum xs last [y] = y last (x:xs) = last xs init [y] = [] init (x:xs) = x : init xs sum függvény last függvény init függvény 3

concat [] = [] concat ( x: xs) = x ++ concat xs concat függvény minimum függvény minimum [x] = x minimum (x:xs) = min x ( minimum xs) (++) [] ys = ys (++) (x:xs) ys = x: ((++) xs ys) ++ operátor merge [] ys = ys merge ( x: xs) ys = x : merge ys xs Összefésülés - merge zip függvény zip [x] (y:ys) = [(x,y)] zip (x:xs) (y:ys) = (x, y) : ( zip xs ys) elem függvény elem x [] = False elem y (x:xs) = y == x ( elem y xs) Data.List.nub függvény nub [] = [] nub (x:xs) = x : nub [ z z <- xs, x /= z ] 8. Gyakorlat Esetszétválasztás Különbség a matematikai szétválasztástól A feltételek és az eredmények oszlopa fel van cserélve, tehát előbb írjuk a feltételt, majd = után az eredményt, valamint a { helyett jelet írunk. Szintaxis Esetek száma 1, 2... Minden esetre: őrfeltétel = kifejezés, ahol az őrfeltétel egy logikai típusú kifejezés, az eyenlőség jobb oldalon álló kifejezések típusa pedig megegyezik. Szemantika Az őrfeltételeket fentről lefelé vizsgáljuk, és az első teljesülő feltételnek megfelelő kifejezést választjuk. Otherwise Az otherwise nem kulcsszó, hanem a Prelude-ben definiált konstans, értéke igaz. 4

Órai példák Nagybetű-kisbetű megcserélése upperlower x isupper x = tolower x otherwise = toupper x -- toupper é s tolower f ü ggv é ny nem csin á l semmit, ha nem karaktert kap értékül. digittoint digittoint x 0 <= x && x <= 9 = fromenum x - fromenum 0 a <= x && x <= f = fromenum x - fromenum a + 10 A <= x && x <= F = fromenum x - fromenum A + 10 otherwise = error (" not a digit " ++ show x) x ^ n n == 0 = 1 odd n = x * (x ^ (n -1) ) otherwise = sqr ( x ^ div n 2) Hatványozás 11. Gyakorlat Magasabb rendű függvények Pascal háromszög Pascal triangle pascaltriangle = iterate f [1] where f xs = zipwith (+) xs (0 : xs) ++ [1] Négyzetgyök számolás Newton-módszerrel statikusan sqrt sqrt a = iterate (\x -> (x+a/x) /2) a!! 10 12. Gyakorlat Függvénykompozíció (.) f g x = f (g x) Függvénykompozíció 1, 11, 111.. lista előállítása (.) f g x = f (g x) numbersmadeofones numb ersma deofon es = iterate (( +1). (* 10) ) 1 numbersmadeofthrees numbersmadeofthrees = map (3*) numbersmadeofones 5

firstletters firstletters = unwords. map ( take 1). words monogram monogram = unwords. map (( ++ ". "). take 1). words 14. Gyakorlat type, newtype, data Sakktábla mező előállítása s (a, b) elem a [ A.. H ] && elem b [1..8] = S(a, b) otherwise = error " hiba " Tükrözés pontra mirrorp (P(a,b)) (P(c,d)) a <= c && b <= d= P(a-c, b-d) a > c && b > d =P(a+(a-c), b+(b-d)) Forrás - ELTE IK programtervezői informatikus szak 2013 tavaszi féléves Funkcionális programozás gyakorlat alapján írt órai jegyzetem. - http://pnyf.inf.elte.hu/fp/index.xml 6