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

Hasonló dokumentumok
2016, Funkcionális programozás

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

FUNKCIONÁLIS PROGRAMOZÁS GYAKORLAT JEGYZET

2018, Funkcionális programozás

2018, Funkcionális programozás

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

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

Szkriptnyelvek. 1. UNIX shell

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

Programozási Nyelvek Gyakorlati jegyzet

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

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

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

FUNKCIONÁLIS PROGRAMOZÁS ELŐADÁS JEGYZET

Informatika terméktervezőknek

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

1. Alapok. #!/bin/bash

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

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

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

Java II. I A Java programozási nyelv alapelemei

Occam 1. Készítette: Szabó Éva

Szoftvertervezés és -fejlesztés I.

Python tanfolyam Python bevezető I. rész

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

Készítette: Nagy Tibor István

PASzSz. Dr. Kotsis Domokos

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

ködös határ (félreértés, hiba)

S z á m í t ó g é p e s a l a p i s m e r e t e k

Programozási nyelvek (ADA)

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

Komputeralgebra Rendszerek

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

9.fejezet: Függvények és külső eljárások

BASH SCRIPT SHELL JEGYZETEK

Vezérlési szerkezetek

Java II. I A Java programozási nyelv alapelemei

A számok kiíratásának formátuma

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

MATLAB OKTATÁS 1. ELŐADÁS ALAPOK. Dr. Bécsi Tamás Hegedüs Ferenc

Webprogramozás szakkör

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

Ködös határ (Félreértés, hiba)

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

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

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

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

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

Vezérlési szerkezetek. Szelekció Ciklusok

Apple Swift kurzus 3. gyakorlat

Gyakorló feladatok Gyakorló feladatok

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

1. Egyszerű (primitív) típusok. 2. Referencia típusok

AWK programozás, minták, vezérlési szerkezetek

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

Oktatási segédlet 2014

FUNKCIONÁLIS PROGRAMOZÁS

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

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

Intermec EasyCoder PM4i nyomtató programozásának alapjai Intermec Fingerprint v8.00 nyelven

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

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

Programozás C és C++ -ban

OOP: Java 1.Gy: Java alapok

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

Programozás II. 2. Dr. Iványi Péter

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

Szoftvertechnológia alapjai Java előadások

C programozási nyelv

Rekurzió. Dr. Iványi Péter

INFORMATIKA javítókulcs 2016

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

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei. Atomerőművek üzemtana

A C# programozási nyelv alapjai

2018, Funkcionális programozás

AWK programozás, minták, vezérlési szerkezetek

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

NAGYPONTOSSÁGÚ EGÉSZ-ARITMETIKA TARTALOM

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

A C# PROGRAMOZÁSI NYELV

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

BME MOGI Gépészeti informatika 7.

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

Programok értelmezése

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

2018, Funkcionális programozás

Felhasználó által definiált adattípus

3. Gyakorlat Ismerkedés a Java nyelvvel

Komplex számok. Wettl Ferenc előadása alapján Wettl Ferenc előadása alapján Komplex számok / 18

Trigonometria Megoldások. 1) Igazolja, hogy ha egy háromszög szögeire érvényes az alábbi összefüggés: sin : sin = cos + : cos +, ( ) ( )

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

ALGEBRAI KIFEJEZÉSEK, EGYENLETEK

C programozás. 1 óra Bevezetés

Hardver leíró nyelvek (HDL)

Komputeralgebra Rendszerek

Átírás:

Haskell 1.

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 elég jól elkerülhetők így a mellékhatások könnyebben elemezhető a kód

Kiértékelési módok Lusta kiértékelés: A lusta kiértékelés során mindig a legkülső redex (redukálható kif.) kerül helyettesítésre, az argumentumokat csak szükség esetén értékeli ki. Ez a módszer mindig megtalálja a kezdeti kifejezés normál formáját. Mohó kiértékelés: A mohó kiértékelés az argumentumok kiértékelésével kezdődik, csak ezután hajtja végre a függvény alkalmazásának megfelelő redukciós lépést. A Haskell nyelv a lusta kiértékelési stratégiát használja.

Példa a két kiértékelésre: inc és duplaz: egyargumentumú függvények inc: eggyel növeli argumentumának értékét, duplaz: megkétszerezi argumentumának értékét Lusta kiértékelés duplaz (inc 9) (inc 9) + (inc 9) (9 + 1) + (9 + 1) 10 + 10 20 Mohó kiértékelés duplaz (inc 9) duplaz (9 + 1) duplaz 10 10 + 10 20

Atomi típusok és operátorok Minden típus nagy betűvel kezdődik! Int egész típusok Infix op.: +,, *, div (egész osztás függvény!), mod (egész osztás maradéka), ^ Prefix op.:, negate Float valós típus, lebegőpontos számok Infix op.: +,, *, / (törtosztás) Prefix: negate,, sin, cos, log, sqrt (gyökvonás)

Bool logikai típus, a True és False értékeket veheti fel. Infix op.: &&- logikai ÉS - logikai VAGY Prefix op.: not

Numerikus argumentumú infix relációs operátorok == - egyenlő /= - nem egyenlő > - nagyobb >= - nagyobb-egyenlő < - kisebb <= - kisebb-egyenlő

Komment - - egy soros komment {- több soros komment -}

Hugs interpreter Linux System Tools Terminál. Innen indítható a Hugs interpreter a hugs paranccsal. Használat: hugs - értelmező indítása; kilépés: :quit (:q) hugs +s - a végrehajtás során elvégzett műveletek, pl. redukciós lépések számának kiíratása hugs +t - a visszatérési érték típusának kiíratása Fontos parancsok: fájl betöltése: :load fájlnév (:l) - paraméter nélkül kidob minden betöltött fájlt utoljára betöltött fájl újratöltése: :reload (:r) kilépés: :quit (:q) vagy Ctrl+D parancsok listája: :?

Haskell program Kiterjesztése:.hs Függvények definícióját fogja tartalmazni Megnyitjuk az interpretert, és betöltjük a fájl tartalmát: > :load fajl_neve.hs Ezután az állományunk bármely függvényét meghívhatjuk Függvény hívása: > fgv_neve param_1 param_2 param_n

Függvény definiálása Paraméteres függvény: függvény_azon :: arg1_típusa - >arg2_típ - > - > argn_típusa - > visszatérés_típusa függvény_azon arg1 arg2 = kifejezések A kifejezések kiértékelése határozza meg, hogy mi lesz a függvény visszatérési értéke. Paraméter nélküli: függyvény_azon :: visszatérés_típusa

Írjuk meg a duplaz és az add függvényt! duplaz :: Int -> Int duplaz x = x + x add :: Int -> Int -> Int add x y = x + y

Esetvizsgálatok (hs_1.hs) Az if kifejezéssel: A visszatérési értéket az argumentumban érkező szám értékétől tesszük függővé. Ha az 0, térjünk vissza 1-gyel, egyébként hajtsuk végre az else ág rekurziós kifejezését. faktorialis :: Int - > Int faktorialis n = if n = = 0 then 1 else n * ( faktorialis ( n 1 ) ) Őrökkel (Boolean Guards): Logikai kifejezéseket adunk meg. A függvény visszatérési értékét azon feltétel mögötti kifejezés határozza meg, amely teljesül. Az egyes feltétel-kifejezés párokat - pal választjuk el. faktorialis :: Int - > Int faktorialis n n = = 0 = 1 n > 0 = n * ( faktorialis ( n 1 ) )

Mintaillesztéssel: Az egyes mintákat külön-külön sorokban definiáljuk és a függvény neve után adjuk meg. A visszatérési értéket azon minta mögötti kifejezés határozza meg, amelyikre illik az argumentum. faktorialis :: Int - > Int faktorialis 0 = 1 faktorialis n = n * ( faktorialis (n - 1) ) A case kifejezéssel: A hagyományos esetkiválasztásos szelekció Haskell-beli megfelelője. A teljesülő eset mögött megadott kifejezés határozza meg a visszatérési értéket. Jelen esetben vagy egy konstansérték vagy egy rekurzív kifejezés. faktorialis :: Int - > Int faktorialis n = case n of 0 - > 1 n - > n * (faktorialis (n - 1))

1. Határozzuk meg két szám átlagát! (hs_2.hs) atlag::double -> Double-> Double atlag x y = (x + y ) / 2

2. Számítsuk ki egy másodfokú egyenlet gyökeit! (hs_4.hs) roots (a,b,c) = if d < 0 then error "sorry" else (x1, x2) where x1 = e + sqrt d / (2 * a) x2 = e - sqrt d / (2 * a) d = b * b - 4 * a * c e = - b / (2 *a)