Tisztán funkcionális adatszerkezetek (folytatás)
|
|
- Alfréd Székely
- 8 évvel ezelőtt
- Látták:
Átírás
1 Tisztán funkcionális adatszerkezetek (folytatás)
2 Rövid összefoglalás az eddigiekről A hatékony adatszerkezetek általában... [..] language-independent only in the sense of Henry Ford: Programmers can use any language as they want, as long as it s imperative. Chris Okasaki, Purely Functional Data Structures, 1996 Az imperatív adatszerkezetek viszont: Gyakran döntő mértékben támaszkodnak az elemek felülírására ( destructive update ) Ezáltal nem tisztán funkcionálisak, mivel azok mindig (automatikusan) perzisztensek: az adatszerkezet régi állapotai is elérhetőek Hatékony (megvalósítható) perzisztencia: lusta kiértékelés, memoization, amortizáció. [2..40]
3 Interlude: Zipper A zipper az adatszerkezet egy olyan ábrázolási módja, amely megkönnyíti annak bejárását és elemeinek módosítását. "gap buffer": ugyanazon pozícióhoz (kurzorhoz) tartozó beszúrások és törlések nyalábolása, optimalizációja az amortizált költsége kevés. Gyakran alkalmazzák nagyobb méretű adatszerkezetekben való mozgásra vagy fókuszálásra, például: Fókusz és ablakok elhelyezésének kezelése (xmonad) Szövegszerkesztők Tranzakciós szemantikával rendelkező állományrendszerek Ez a megoldás tetszőleges rekurzívan definiált adatszerkezet (lista, fa stb.) esetén alkalmazható. [3..40]
4 Kétirányú listák: "List with Zipper" [4..40]
5 Kétirányú listák: "List with Zipper" [5..40]
6 Kétirányú listák: implementáció (1) newtype ZippList α = ZPL ([α], [α]) fromlist :: [α] ZippList α fromlist xs = ZPL ([], xs) tolist :: ZippList α [α] tolist (ZPL (xs, ys)) = reverse xs ++ ys get :: ZippList α [α] get (ZPL (_, ys)) = ys [6..40]
7 Kétirányú listák: implementáció (2) right :: ZippList α ZippList α right (ZPL (xs, (y : ys))) = ZPL (y : xs, ys) right zl = zl left :: ZippList α ZippList α left (ZPL ((x : xs), ys)) = ZPL (xs, x : ys) left zl = zl put :: Either α α ZippList α ZippList α put (Left e) (ZPL (xs, ys)) = ZPL (e : xs, ys) put (Right e) (ZPL (xs, ys)) = ZPL (xs, e : ys) putleft = put Left putright = put Right [7..40]
8 Kétirányú listák: implementáció (3) modify :: (α Maybe α) ZippList α ZippList α modify f (ZPL (xs, y : ys)) = ZPL $ case (f y) of Nothing (xs, ys) Just e (xs, e : ys) modify _ zl = zl update f = modify (Just f ) delete = modify (const Nothing) [8..40]
9 Kétirányú fák: "Tree with Zipper" [9..40]
10 Kétirányú fák: "Tree with Zipper" [10..40]
11 Kétirányú fák: "Tree with Zipper" [11..40]
12 Kétirányú fák: "Tree with Zipper" [12..40]
13 Kétirányú fák: implementáció (1) data Tree α = Branch (Tree α) (Tree α) Leaf α data TreeContext α = Top L (TreeContext α) (Tree α) R (Tree α) (TreeContext α) type Location α γ = (α, γ) type TreeLocation α = Location (Tree α) (TreeContext α) [13..40]
14 Kétirányú fák: implementáció (2) treeleft :: TreeLocation α TreeLocation α treeleft (Branch l r, c) = (l, L c r) treeright :: TreeLocation α TreeLocation α treeright (Branch l r, c) = (r, R l c) treetop :: Tree α TreeLocation α treetop t = (t, Top) treeup :: TreeLocation α TreeLocation α treeup (t, L c r) = (Branch t r, c) treeup (t, R l c) = (Branch l t, c) [14..40]
15 Kétirányú fák: implementáció (3) treeupmost :: TreeLocation α TreeLocation α treeupmost Top) = l treeupmost l = treeupmost (treeup l) treechange :: TreeLocation α (Tree α Tree α) TreeLocation α treechange (t, c) f = (f t, c) Például: treeview :: TreeLocation α Tree α treeview (t, _) = t treechange ((treeright treeleft treetop) t) (const (Leaf 0)) [15..40]
16 Ráadás: Zipper monád newtype Zipper λ α = Zipper { unzipper :: State λ α } deriving (Functor, Applicative, Monad, MonadState λ) traverse :: Location α γ Zipper (Location α γ) α α traverse start tt = evalstate (unzipper tt) start move :: (Location α γ Location α γ) Zipper (Location α γ) α move f = do modify f gets fst change :: (α α) Zipper (Location α γ) α change f = do modify (λ (t, c). (f t, c)) gets fst [16..40]
17 Zipper monád: példa swaptree :: Zipper (TreeLocation α) (Tree α) swaptree = move swap where swap (t, R l c) = (l, L c t) swap (t, L c r) = (r, R t c) treemap :: (α Tree α) (Tree α Tree α Tree α) (Tree α Tree α) treemap leaf branch = λ t. (treetop t) traverse treemapm where treemapm = do t gets fst case t of Branch do move treeleft l mod treemapm swaptree r mod treemapm move treeup (change const) (branch l mod r mod ) Leaf x return (leaf x) [17..40]
18 FingerTree (intuíció) [18..40]
19 FingerTree (intuíció) [19..40]
20 FingerTree (intuíció) [20..40]
21 FingerTree (intuíció) [21..40]
22 FingerTree (intuíció) [22..40]
23 FingerTree (intuíció) [23..40]
24 FingerTree (intuíció) [24..40]
25 Implementáció: társított (indexelt) típusszinonimák {-# LANGUAGE TypeFamilies, KindSignatures #-} class Collects α where type Elem α :: empty :: α insert :: Elem α α α... instance Eq (Elem [ε]) Collects [ε] where type Elem [ε] = ε empty = [] insert e xs = (e : xs)... [25..40]
26 Implementáció: nézetminták {-# LANGUAGE ViewPatterns #-} type Typ =... data TypView = Unit Arrow Typ Typ view :: Typ TypView view =... size :: Typ Integer size t = case (view t) of Unit 1 Arrow t 1 t 2 size t 1 + size t 2 Nézetminták segítségével pedig: size (view Unit) = 1 size (view Arrow t 1 t 2 ) = size t 1 + size t 2 [26..40]
27 Implementáció: mohón kiértékelt adatkonstruktorok data T = T!Int!Int A konstruktor! segítségével megjelölt paramétereit (strictness annotation) normálformára kell hozni, mielőtt azt alkalmazzuk. Körültekintéssel kell alkalmazni, mivel ez automatikusan nem vezet a teljesítmény növekedéséhez. Sőt, ronthatja a teljesítményt: ha az adott mezőt már egyszer kiértékeltük, akkor lényegében még egyszer kiértékeltetjük (feleslegesen). A helyzet tisztázásában a fordító nem mindig tud a segítségünkre lenni. [27..40]
28 Implementáció: egymásba ágyazott típusok -- alternáló lista data AList α β = Nil Cons α (AList β α) alist :: AList Int Char alist = Cons 1 (Cons A (Cons 2 (Cons B Nil))) -- ciklikus lista data Void data CList α β = Var β Nil RCons α (CList (Maybe β)) 1 2 clist 1, clist 2 :: CList Int Void clist 1 = RCons 1 (RCons 2 (Var Nothing)) clist 2 = RCons 1 (RCons 2 (RCons 3 (Var (Just Nothing)))) A rekurzív részben az adattípust nem a deklaráció szerint alkalmazzuk: nested, non-regular, non-uniform, heterogenous data type Adattípusokon belüli invariánsok (típusozott) megtartására alkalmazható. [28..40]
29 FingerTree: definíció (1) class (Monoid (Measure α)) Measured α where type Measure α measure :: α Measure α data FingerTree α = Empty Single α Deep!(Measure α)!(digit α) (FingerTree (Node α))!(digit α) deep :: (Measured α) Digit α FingerTree (Node α) Digit α FingerTree α deep pr m sf = Deep (measure pr measure m measure sf ) pr m sf data Node α = Node2 (Measure α) α α Node3 (Measure α) α α α node2 :: (Measured α) α α Node α node2 x y = Node2 (measure x measure y) x y node3 :: (Measured α) α α α Node α node3 x y z = Node3 (measure x measure y measure z) x y z [29..40]
30 FingerTree: definíció (2) newtype Digit α = D { und :: [α] } prependdigit :: α Digit α Digit α prependdigit x (D xs) = D (x : xs) appenddigit :: Digit α α Digit α appenddigit (D xs) x = D (xs ++ [x]) breakdigit :: Digit α (α, Digit α) breakdigit (D (x : xs)) = (x, D xs) kaerbdigit :: Digit α (α, Digit α) kaerbdigit (D xs) = (last xs, D (init xs)) [30..40]
31 FingerTree: definíció (3) instance (Measured α) Measured (Node α) where type Measure (Node α) = Measure α measure (Node2 m ) = m measure (Node3 m _) = m instance (Measured α) Measured (Digit α) where type Measure (Digit α) = Measure α measure (D xs) = foldr ( ) mempty (map measure xs) instance (Measured α) Measured (FingerTree α) where type Measure (FingerTree α) = Measure α measure Empty = mempty measure (Single x) = measure x measure (Deep m _) = m [31..40]
32 FingerTree: létrehozás -- O(1) empty :: (Measured α) FingerTree α empty = Empty singleton :: (Measured α) α FingerTree α singleton = Single infixr 5 ( ) :: (Measured α) α FingerTree α FingerTree α x Empty = Single x x (Single y) = deep (D [x]) Empty (D [y]) x (Deep _ (D [y, z, u, w]) m sf ) = deep (D [x, y]) (node3 z u w m) sf x (Deep _ pr m sf ) = deep (prependdigit x pr) m sf -- O(n) ( ) :: (Measured α) [α] FingerTree α FingerTree α xs ys = foldr ( ) ys xs fromlist :: (Measured α) [α] FingerTree α fromlist xs = xs Empty digittotree :: (Measured α) Digit α FingerTree α digittotree (D xs) = fromlist xs [32..40]
33 FingerTree: elérés infixr 5 data ViewL α = EmptyL α (FingerTree α) -- O(1) viewl :: (Measured α) FingerTree α ViewL α viewl Empty = EmptyL viewl (Single x) = x Empty viewl (Deep _ pr m sf ) = p (deepl lpr m sf ) where (p, lpr) = breakdigit pr deepl :: (Measured α) Digit α FingerTree (Node α) Digit α FingerTree α deepl (D []) (viewl EmptyL) sf = digittotree sf deepl (D []) (viewl x m) sf = deep (nodetodigit x) m sf deepl pr m sf = deep pr m sf nodetodigit :: (Measured α) Node α Digit α nodetodigit (Node2 _ x y) = D [x, y] nodetodigit (Node3 _ x y z) = D [x, y, z] [33..40]
34 FingerTree: elérés (alkalmazás) isempty :: (Measured α) FingerTree α Bool isempty (viewl EmptyL) = True isempty _ = False headl :: (Measured α) FingerTree α α headl (viewl x _) = x taill :: (Measured α) FingerTree α FingerTree α taill (viewl _ x) = x [34..40]
35 FingerTree: összekapcsolás infixr 5 -- O(log(min(n, m))) ( ) :: (Measured α) FingerTree α FingerTree α FingerTree α xs ys = f xs [] ys where f :: (Measured α) FingerTree α [α] FingerTree α FingerTree α f Empty ts xs = ts xs f xs ts Empty = xs ts f (Single x) ts xs = x (ts xs) f xs ts (Single x) = (xs ts) x f (Deep _ pr 1 m 1 sf 1 ) ts (Deep _ pr 2 m 2 sf 2 ) = deep pr 1 (f m 1 (nodes (und sf 1 ++ ts ++ und pr 2 )) m 2 ) sf 2 nodes :: (Measured α) [α] [Node α] nodes [x, y] = [node2 x y] nodes [x, y, z] = [node3 x y z] nodes [x, y, z, u] = [node2 x y, node2 z u] nodes (x : y : z : xs) = node3 x y z : nodes xs [35..40]
36 FingerTree: felbontás (1) data Split φ α = Split (φ α) α (φ α) i: kezdőérték, P( ): monoton predikátum, csak és P(i) P(i d ) = let Split l x r = splitdigit p i d in tolist l ++ [x] ++ tolist r = tolist d P(i l ) P(i l x ) splitdigit :: (Measured α) (Measure α Bool) Measure α Digit α Split Digit α splitdigit p i (breakdigit (x, D [])) = Split (D []) x (D []) splitdigit p i (breakdigit (x, xs)) p j = Split (D []) x xs otherwise = let Split l y r = splitdigit p j xs in Split (prependdigit x l) y r where j = i measure x x i-1 x i x 1 x 2 x i+1 x n-1 vn-1... P... P x n i v 1 v 2 v i-1 v i [36..40] vn
37 FingerTree: felbontás (2) P(i) P(i t ) = let Split l x r = splittree p i t in tolist l ++ [x] ++ tolist r = tolist t P(i l ) P(i l x ) -- O(log(min(n l, n r ))) splittree :: (Measured α) (Measure α Bool) Measure α FingerTree α Split FingerTree α splittree p i (Single x) = Split Empty x Empty splittree p i (Deep _ pr m sf ) p vpr = let Split l x r = splitdigit p i pr in Split (digittotree l) x (deepl r m sf ) p vm = let Split ml xs mr = splittree p vpr m Split l x r = splitdigit p (vpr measure ml) (nodetodigit xs) in Split (deepr pr ml l) x (deepl r mr sf ) otherwise = let Split l x r = splitdigit p vm sf in Split (deepr pr m l) x (digittotree r) where (vpr, vm) = (i measure pr, vpr measure m) [37..40]
38 FingerTree: felbontás (3) t Empty = let Split l x r = splittree p i t in tolist l ++ [x] ++ tolist r = tolist t (l = Empty P(i l )) (r = Empty P(i l x )) split :: (Measured α) (Measure α Bool) FingerTree α (FingerTree α, FingerTree α) split p Empty = (Empty, Empty) split p t p (measure t) = (l, x r) otherwise = (t, Empty) where Split l x r = splittree p mempty t [38..40]
39 FingerTree: véletlen elérésű sorozatok (alkalmazás) newtype Elem ν α = Elem { getelem :: α } newtype Size = Size { getsize :: Int } deriving (Eq, Ord) newtype Seq α = Seq (FingerTree (Elem Size α)) instance Monoid Size where mempty = Size 0 mappend (Size m) (Size n) = Size (m + n) instance Measured (Elem Size α) where type Measure (Elem Size a) = Size measure (Elem _) = Size 1 fromlist :: [α] Seq α fromlist xs = Seq (FT.fromList (map Elem xs)) tolist :: Seq α [α] tolist (Seq t) = map getelem (FT.toList t) [39..40]
40 FingerTree: véletlen elérésű sorozatok (alkalmazás) length :: Seq α Int length (Seq xs) = getsize (FT.measure xs) splitat :: Int Seq α (Seq α, Seq α) splitat i (Seq xs) = (Seq l, Seq r) where (l, r) = FT.split (Size i <) xs (!) :: Seq α Int α (Seq xs)! i = getelem x where Split _ x _ = FT.splitTree (Size i <) (Size 0) xs [40..40]
Tisztán funkcionális adatszerkezetek
Tisztán funkcionális adatszerkezetek Bevezetés A hatékony adatszerkezetek általában... [..] language-independent only in the sense of Henry Ford: Programmers can use any language as they want, as long
Tisztán funkcionális adatszerkezetek (folytatás)
Tisztán funkcionális adatszerkezetek (folytatás) FingerTree (intuíció) [2..26] FingerTree (intuíció) [3..26] FingerTree (intuíció) [4..26] FingerTree (intuíció) [5..26] FingerTree (intuíció) [6..26] FingerTree
Tulajdonságalapú tesztelés
Tulajdonságalapú tesztelés QuickCheck A QuickCheck Haskell programok automatikus, tulajdonságalapú tesztelésére használható. Programspecifikáció: program által teljesítendő tulajdonságok Nagy számú, a
Programozás burritokkal
Monádok (folytatás) Programozás burritokkal [2..21] Programozás monádokkal: Programstrukturálás type IO α = World (α, World) -- putstr :: String IO () -- getline :: IO String (>>=) :: IO α (α IO β) IO
DSL-eket kétféleképpen szoktak megvalósítani:
Beágyazott nyelvek Bevezetés Domain-specific language (DSL), szakterület-specifikus nyelv : A computer programming language of limited expressiveness focused on a particular domain. Martin Fowler, Domain-Specific
Funkcionális Nyelvek 2 (MSc)
Funkcionális Nyelvek 2 (MSc) Páli Gábor János pgj@elte.hu Eötvös Loránd Tudományegyetem Informatikai Kar Programozási Nyelvek és Fordítóprogramok Tanszék Tematika A (tervezett) tematika rövid összefoglalása
2018, Funkcionális programozás
Funkcionális programozás 10. előadás Sapientia Egyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2018, tavaszi félév Miről volt szó? a foldl és foldr függvények lista
S2-01 Funkcionális nyelvek alapfogalmai
S2-01 Funkcionális nyelvek alapfogalmai Tartalom 1. Funkcionális nyelvek alapfogalmai Modell Kiértékelés Curry-zés Magasabbrendű függvények Listák Tisztaság 2. Típusok Algebrai adattípusok Típusosztályok
Lineáris belsőpontos Newton-iteráció
Lineáris belsőpontos Newton-iteráció Implementáció Haskellben Dr. Érdi Gergő http://gergo.erdi.hu/ Az alábbiakban összeállítunk egy Haskell modult, amely a belsőpontos Newton-iteráció algoritmusával old
FUNKCIONÁLIS PROGRAMOZÁS ELŐADÁS JEGYZET
FUNKCIONÁLIS PROGRAMOZÁS ELŐADÁS JEGYZET Szerkesztette: Balogh Tamás 2013. május 30. 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
Funkcionális programozás
Funkcionális programozás Horváth Zoltán E-mail: hz@inf.elte.hu Eötvös Lóránd Tudományegyetem, Budapest Programozási Nyelvek és Fordítóprogramok Tanszék Ajánlott irodalom Plasmeijer et al.: Programming
2016, Funkcionális programozás
Funkcionális programozás 2. előadás Sapientia Egyetem, Műszaki és Humántudományok Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2016, tavaszi félév Miről volt szó? Programozási paradigmák: imperatív,
2016, Funkcionális programozás
Funkcionális programozás 11. előadás Sapientia Egyetem, Műszaki és Humántudományok Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2016, tavaszi félév Miről volt szó? Haskell I/O műveletek, feladatok:
FUNKCIONÁLIS PROGRAMOZÁS
FUNKCIONÁLIS PROGRAMOZÁS A funkcionális programozás néhány jellemzője Funkcionális programozás 1-2 Funkcionális, más néven applikatív programozás Funkcionális = függvényalapú, függvényközpontú Applikatív
Fejlett programozási nyelvek C++ Iterátorok
Fejlett programozási nyelvek C++ Iterátorok 10. előadás Antal Margit 2009 slide 1 Témakörök I. Bevezetés II. Iterátor definíció III. Iterátorok jellemzői IV. Iterátorkategóriák V. Iterátor adapterek slide
2018, Funkcionális programozás
Funkcionális programozás 3. előadás Sapientia Egyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2018, tavaszi félév Miről volt szó? A Haskell programozási nyelv főbb
HASKELL. Tartalom előadás
HASKELL Tartalom 1 HS1-2 1. előadás Bevezetés A mint funkcionális nyelv típusok és értékek függvények és operátorok adatkonstruktorok tulajdonságai mintaillesztés, őrök vezérlési szerkezetek a forráskód
Tartalom előadás
HASKELL Tartalom 1 HS1-2 1. előadás Bevezetés A mint funkcionális nyelv típusok és értékek függvények és operátorok adatkonstruktorok tulajdonságai mintaillesztés, őrök vezérlési szerkezetek a forráskód
Párhuzamos programozás Haskellben (folytatás)
Párhuzamos programozás Haskellben (folytatás) Mit tudtunk meg eddig a párhuzamos programokról? Párhuzamos programozással gyorsíthatunk a programon, miközben megőrizzük a determinisztikusságát. Teljesen
Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++
Dinamikus adatszerkezetek 2D generikus tömb: C++ template class CArray2D protected: TYPE **m_array; long m_row, m_col; public: CArray2D(long row, long col) // konstruktor m_array = new TYPE*[row];
Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++ 2D tömb: Java versus C++ 2D tömb: Java.
2D generikus tömb: C++ Dinamikus adatszerkezetek template class CArray2D protected: TYPE **m_array; long m_row, m_col; public: CArray2D(long row, long col) // konstruktor m_array = new TYPE*[row];
2019, Funkcionális programozás. 5. el adás. MÁRTON Gyöngyvér
Funkcionális programozás 5. el adás Sapientia Egyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2019, tavaszi félév Mir l volt szó? a Haskell kiértékelési stratégiája
Adatszerkezetek és algoritmusok
2009. november 20. Bevezet El z órák anyagainak áttekintése Ismétlés Adatszerkezetek osztályozása Sor, Verem, Lengyelforma Statikus, tömbös reprezentáció Dinamikus, láncolt reprezentáció El z órák anyagainak
List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error
Generics Egyszerűbb példák (java.util csomagból): public interface List { void add(e x); Iterator iterator(); public interface Iterator { E next(); boolean hasnext(); E - formális típusparaméter,
Logikai és funkcionális programozás funkcionális programozás modul
Logikai és funkcionális programozás funkcionális programozás modul A laborfeladatok írásához a Clean nyelvet használtuk a program ingyenesen letölthető a ftp://ftp.cs.kun.nl/pub/clean illetve a http://www.cs.kun.nl/~clean
Doktori értekezés. Diviánszky Péter 2012.
Doktori értekezés Diviánszky Péter 2012. Referenciák tisztán funkcionális nyelvekben Diviánszky Péter ELTE IK Informatika Doktori Iskola Az informatika alapjai és módszertana oktatási program vezető:
Generikus osztályok, gyűjtemények és algoritmusok
Programozási, gyűjtemények és algoritmusok bejárása Informatikai Kar Eötvös Loránd Tudományegyetem 1 Tartalom 1 bejárása 2 bejárása 2 Java-ban és UML-ben bejárása Az UML-beli paraméteres osztályok a Java
A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai
A programozás alapjai 1 1. előadás Híradástechnikai Tanszék Amiről szólesz: A tárgy címe: A programozás alapjai A számítógép részegységei, alacsony- és magasszintű programnyelvek, az imperatív programozási
Az F# nyelv erőforrásanalízise
Az F# nyelv erőforrásanalízise Góbi Attila Eötvös Loránd Tudományegyetem Támogatta a KMOP-1.1.2-08/1-2008-0002 és az Európai Regionális Fejlesztési Alap. 2012. Június 19. Góbi Attila (ELTE) Az F# nyelv
Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek
Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 11. előadás 2014.05.12. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Adatszerkezetek
Felhasználó által definiált adattípus
Felhasználó által definiált adattípus C++ Izsó Tamás 2017. február 24. Izsó Tamás Felhasználó által definiált adattípus/ 1 Irodalom Izsó Tamás Felhasználó által definiált adattípus/ 2 Programtervezési
1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon
1. Template (sablon) 1.1. Függvénysablon Maximum függvény megvalósítása függvénynév túlterheléssel. i n l i n e f l o a t Max ( f l o a t a, f l o a t b ) { return a>b? a : b ; i n l i n e double Max (
Generikus keresőfák Erlangban
Generikus keresőfák Erlangban Patai Gergely 2008. december 1. Tartalomjegyzék 1 Bináris keresőfák 1 2 Halmazok 1 3 Asszociatív tár 3 4 Függvények általánosítása 5 5 Függvények egységesítése 7 5.1 Halmaz..................................................
Adatbázis-kezelés ODBC driverrel
ADATBÁZIS-KEZELÉS ODBC DRIVERREL... 1 ODBC: OPEN DATABASE CONNECTIVITY (NYÍLT ADATBÁZIS KAPCSOLÁS)... 1 AZ ODBC FELÉPÍTÉSE... 2 ADATBÁZIS REGISZTRÁCIÓ... 2 PROJEKT LÉTREHOZÁSA... 3 A GENERÁLT PROJEKT FELÉPÍTÉSE...
2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér
Funkcionális programozás 2. el adás Sapientia Egyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2019, tavaszi félév Mir l volt szó? Követelmények, osztályozás Programozási
2019, Funkcionális programozás. 4. el adás. MÁRTON Gyöngyvér
Funkcionális programozás 4. el adás Sapientia Egyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2019, tavaszi félév Mir l volt szó? GHC parancsok fenntartott szavak
Collections. Összetett adatstruktúrák
Collections Összetett adatstruktúrák Collections framework Előregyártott interface-ek és osztályok a leggyakoribb összetett adatszerkezetek megvalósítására Legtöbbször módosítás nélkül használhatók Időt,
Oktatási segédlet 2014
Oktatási segédlet 2014 A kutatás a TÁMOP 4.2.4.A/2-11-1-2012- 0001 azonosító számú Nemzeti Kiválóság Program Hazai hallgatói, illetve kutatói személyi támogatást biztosító rendszer kidolgozása és működtetése
Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?
Ugrólisták Ugrólisták Ugrólisták Ugrólisták RSL Insert Example insert(22) with 3 flips 13 8 29 20 10 23 19 11 2 13 22 8 29 20 10 23 19 11 2 Runtime? Ugrólisták Empirical analysis http://www.inf.u-szeged.hu/~tnemeth/alga2/eloadasok/skiplists.pdf
Feladat. Ternáris fa. Típusspecikáció. Reprezentáció. Absztrakt implementáció. Érdi Gerg EAF II. 4/3.
Feladat djuk meg, hogy egy ternáris fa INORDER bejárás szerint sorozatba f zött értékei között mekkora a leghosszabb csupa pozitív számot tartalmazó részsorozat. Ternáris fa Típusspecikáció z alaphalmaz
Programozási technológia
Programozási technológia Generikus osztályok Gyűjtemények Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Generikus osztályok Javaban az UML paraméteres osztályainak a generikus (sablon) osztályok felelnek
FUNKCIONÁLIS PROGRAMOZÁS GYAKORLAT JEGYZET
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
A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába
A lista eleme 0 adat rész mutató rész Listaelem létrehozása p: Node 0 0 3 0 Az elemet nekünk kell bef zni a listába Deklarálás struct Node { int int value; Node* next; next; adattagok Létrehozás Node*
Önszervező bináris keresőfák
Önszervező bináris keresőfák Vágható-egyesíthető halmaz adattípus H={2,5,7,11,23,45,75} Vag(H,23) Egyesit(H1,H2) H1= {2,5,7,11} H2= {23,45,75} Vágás A keresési útvonal mentén feldaraboljuk a fát, majd
C# gyorstalpaló. Készítette: Major Péter
C# gyorstalpaló Készítette: Major Péter Adattípusok Logikai változó Egész szám (*: előjel nélküli) Lebegőponto s szám Típus Típusnév másképpen (egyenértékű) Helyigény (bit) Példa bool Boolean 8 (!) true,
8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:
8. Gyakorlat SQL SQL: Structured Query Language; a relációs adatbáziskezelők szabványos, strukturált lekérdező nyelve SQL szabványok: SQL86, SQL89, SQL92, SQL99, SQL3 Az SQL utasításokat mindig pontosvessző
C++ Standard Template Library (STL)
Programozási Nyelvek és Fordítóprogramok Tanszék Programozási Nyelvek I. Témák 1 STL alapok 2 STL fogalmak 3 Konténerek 4 Iterátorok 5 Funktorok C++ STL Ne fedezzük fel újra spanyolviaszt! Sok adatszerkezet/algoritmus
Java II. I A Java programozási nyelv alapelemei
Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak
Bevezetés a programozásba 2
Bevezetés a programozásba 2 7. Előadás: STL konténerek, sablonok http://digitus.itk.ppke.hu/~flugi/ Vector int int main() { vector v(10); int int sum=0; for for (int i=0;i
2018, Funkcionális programozás
Funkcionális programozás 7. előadás Sapientia Egyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2018, tavaszi félév Miről volt szó? összefésüléses rendezés (merge
Bánsághi Anna 2014 Bánsághi Anna 1 of 33
IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 7. ELŐADÁS - ABSZTRAKT ADATTÍPUS 2014 Bánsághi Anna 1 of 33 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív
A lista adatszerkezet A lista elemek egymásutániságát jelenti. Fajtái: statikus, dinamikus lista.
Lista adatszerkezet A lista adatszerkezet jellemzői 1 Különböző problémák számítógépes megoldása során gyakran van szükség olyan adatszerkezetre, amely nagyszámú, azonos típusú elem tárolására alkalmas,
117. AA Megoldó Alfréd AA 117.
Programozás alapjai 2. (inf.) pót-pótzárthelyi 2011.05.26. gyak. hiányzás: kzhpont: MEG123 IB.028/117. NZH:0 PZH:n Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,
Láncolt Listák. Adat1 Adat2 Adat3 ø. Adat1 Adat2 ø Adat3
Láncolt Listák Adatszerkezetek Adatszerkezet: Az adatelemek egy olyan véges halmaza, amelyben az adatelemek között szerkezeti összefüggések vannak Megvalósítások: - Tömb, Láncolt lista, Fa, Kupac, Gráf,
Kifejezések. Kozsik Tamás. December 11, 2016
Kifejezések Kozsik Tamás December 11, 2016 Kifejezések Lexika Szintaktika Szemantika Lexika azonosítók (változó-, metódus-, típus- és csomagnevek) literálok operátorok, pl. + zárójelek: (), [], {},
OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN
OOP: Java 11.Gy: Enumok, beágyazott osztályok 13/1 B ITv: MAN 2019.04.24 ArrayList Rugalmas tömb A tömbök korlátai Fix méret, nem lehet menet közben megnövelni Ha túl nagyra választjuk, fölösleges helyfoglalás
Adattípusok. Max. 2GByte
Adattípusok Típus Méret Megjegyzés Konstans BIT 1 bit TRUE/FALSE SMALLINT 2 byte -123 INTEGER 4 byte -123 COUNTER 4 byte Automatikus 123 REAL 4 byte -12.34E-2 FLOAT 8 byte -12.34E-2 CURRENCY / MONEY 8
Dinamikus láncolt lista 4. GYAKORLAT
Dinamikus láncolt lista 4. GYAKORLAT Szekvenciális adatszerkezet A szekvenciális adatszerkezet olyan rendezett pár, amelynél az R reláció tranzitív lezártja teljes rendezési reláció. Szekvenciális
Adattípusok. Max. 2GByte
Adattípusok Típus Méret Megjegyzés Konstans BIT 1 bit TRUE/FALSE TINIINT 1 byte 12 SMALLINT 2 byte -123 INTEGER 4 byte -123 COUNTER 4 byte Automatikus 123 REAL 4 byte -12.34E-2 FLOAT 8 byte -12.34E-2 CURRENCY
Programok értelmezése
Programok értelmezése Kód visszafejtés. Izsó Tamás 2016. szeptember 22. Izsó Tamás Programok értelmezése/ 1 Section 1 Programok értelmezése Izsó Tamás Programok értelmezése/ 2 programok szemantika értelmezése
Programozási nyelvek II.: JAVA, 4. gyakorlat
Programozási nyelvek II.: JAVA, 4. gyakorlat 2017. október 2-6. Programozási nyelvek II.: JAVA, 4. gyakorlat 1 / 32 A 4. gyakorlat tematikája Tömbök A java.util.arrays osztály A String osztály A StringBuffer
Adatbázisok* tulajdonságai
Gazdasági folyamatok térbeli elemzése 4. előadás 2010. 10. 05. Adatbázisok* tulajdonságai Rendezett, logikailag összefüggő és meghatározott szempont szerint tárolt adatok és/vagy információk halmaza Az
Adatbázisok elmélete 10. előadás
Adatbázisok elmélete 10. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu http://www.cs.bme.hu/ kiskat 2004 ADATBÁZISOK ELMÉLETE
Láncolt listák Témakörök. Lista alapfogalmak
Láncolt listák szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Lista alapfogalmai Egyirányú egyszerű láncolt lista Egyirányú rendezett láncolt lista Speciális láncolt listák Témakörök
SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók
SQL*Plus Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP dolgozó), DEPT osztály) "közönséges" felhasználók Adatszótár: metaadatokat tartalmazó, csak olvasható táblák táblanév-prefixek:
Az arrow struktúra. Patai Gergely április 1.
Az arrow struktúra Patai Gergely 2008. április 1. 1. Kiinduló motiváció A funkcionális nyelvek alapvető építőeleme a függvény. Egyszerű függvényekből különböző kombinátorok segítségével bonyolultabb függvények
2018, Funkcionális programozás
Funkcionális programozás 6. előadás Sapientia Egyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2018, tavaszi félév Miről volt szó? Haskell modulok, kompilálás a
Bevezetés, a C++ osztályok. Pere László
Programozás módszertan II. p. Programozás módszertan II. Bevezetés, a C++ osztályok Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA ÉS ÁLTALÁNOS TECHNIKA TANSZÉK
Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok
Bevezetés a programozásba II 5. Előadás: Másoló konstruktor, túlterhelés, operátorok Emlékeztető struct Vektor { int meret, *mut; Vektor(int meret); int szamlal(int mit); }; int Vektor::szamlal(int mit)
Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto
Informatikai Kar 3. fejezet alapismeretek Giachetta Roberto Actually I made up the term 'Object-Oriented', and I can tell you I did not have C++ in mind. (Alan Kay) adottak) 3:3 Feladat: Stack) adatszerkezetet
infix kifejezés a+b ab+ +ab postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab Készítette: Szabóné Nacsa Rozália
infix kifejezés a+b ab+ +ab Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab 4 Lengyelforma J. Lukasewitz lengyel matematikus használta el
Komputeralgebra rendszerek
Komputeralgebra rendszerek III. Változók Czirbusz Sándor czirbusz@gmail.com Komputeralgebra Tanszék ELTE Informatika Kar 2009-2010 ősz Index I 1 Szimbolikus konstansok kezelés A konstansok Nevek levédése
Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése
Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése Készítette: Gregorics Tibor Szabóné Nacsa Rozália Alakítsunk át egy infix formájú aritmetikai kifejezést postfix
Adatbázisok elmélete 9. előadás
Adatbázisok elmélete 9. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu http://www.cs.bme.hu/ kiskat 2005 ADATBÁZISOK ELMÉLETE
Objektumok inicializálása
Objektumok inicializálása Miskolci Egyetem Általános Informatikai Tanszék Objektumok inicializálása CPP4 / 1 Tartalom public adattagok inicializálása felsorolással konstruktor objektum tömbök osztály típusú
Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás
Számítástechnika II. BMEKOKAA153 2. Előadás Dr. Bécsi Tamás Tömbök (Arrays) Definíció: típus[] név; (pld. int[] szamok; ) Inicializálás: int[] szamok = new int[4]; int[] szamok = 1,2,4,3,5}; int[] szamok
Széchenyi István Egyetem www.sze.hu/~herno
Oldal: 1/6 A feladat során megismerkedünk a C# és a LabVIEW összekapcsolásának egy lehetőségével, pontosabban nagyon egyszerű C#- ban írt kódból fordítunk DLL-t, amit meghívunk LabVIEW-ból. Az eljárás
Komputeralgebra rendszerek
Komputeralgebra rendszerek III. Változók Czirbusz Sándor czirbusz@gmail.com Komputeralgebra Tanszék ELTE Informatika Kar 2009-2010 ősz Index I 1 Szimbolikus konstansok kezelés A konstansok Nevek levédése
van neve lehetnek bemeneti paraméterei (argumentumai) lehet visszatérési értéke a függvényt úgy használjuk, hogy meghívjuk
függvények ismétlése lista fogalma, használata Game of Life program (listák használatának gyakorlása) listák másolása (alap szintű, teljes körű) Reversi 2 Emlékeztető a függvények lényegében mini-programok,
LUSTA KIÉRTÉKELÉS, LUSTA LISTA
Mohó kiértékelés, lusta kiértékelés FP-11-12-230 Idézzük föl: Mohó (eager) vagy applikatív sorrendű (applicative order) kiértékelésnek nevezzük azt a kiértékelési sorrendet, amikor egy összetett kifejezésben
Programozás alapjai. 5. előadás
5. előadás Wagner György Általános Informatikai Tanszék Cserélve kiválasztásos rendezés (1) A minimum-maximum keresés elvére épül. Ismétlés: minimum keresés A halmazból egy tetszőleges elemet kinevezünk
STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1
STL gyakorlat C++ Izsó Tamás 2016. május 9. Izsó Tamás STL gyakorlat/ 1 Komponensek kapcsolata Deklarálja az alábbi osztálydiagramon szereplő osztályok közül az A, AA és AB osztályokat! A konstruktorokat
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
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 1 Külső összekapcsolás Összekapcsoljuk R és S relációkat: R C S. R azon sorait,
Pénzügyi algoritmusok
Pénzügyi algoritmusok A C++ programozás alapjai Az Integrált Fejlesztői Környezet C++ alapok Az Integrált Fejlesztői Környezet Visual Studio 2013 Community Edition Kitekintés: fordítás Preprocesszor Fordító
Java II. I A Java programozási nyelv alapelemei
Java2 / 1 Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2009. 02. 09. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve
Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.
Sapientia - EMTE 2008 Az előadás célja JPA - - perzisztencia ORM - - Objektumrelációs leképzés - Entitásbabok Állandóság Mechanizmus amely során az alkalmazás adatai megőrzésre kerülnek valamely perzisztens
Programozási nyelvek II.: JAVA, 4. gyakorlat
Programozási nyelvek II.: JAVA, 4. gyakorlat 2017. október 2-6. Programozási nyelvek II.: JAVA, 4. gyakorlat 1 / 29 A 4. gyakorlat tematikája Tömbök A java.util.arrays osztály A String osztály StringBuilder
Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.
Táblakezelés: Open SQL Internal table Tarcsi Ádám: Az SAP programozása 1. OPEN SQL Tarcsi Ádám, ELTE SAP Excellence Center: SAP programozás oktatóanyag 2 Open SQL Az Open SQL kulcsszavai: SELECT INSERT
2018, Funkcionális programozás
Funkcionális programozás 1. előadás Sapientia Egyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2018, tavaszi félév Követelmények, osztályozás Előadás, jelenlét:
Programozás C++ -ban 2007/4
Programozás C++ -ban 2007/4 1. Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több szempontból is hasznos
STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók
STL Elsődleges komponensek: Tárolók Algoritmusok Bejárók Másodlagos komponensek: Függvény objektumok Adapterek Allokátorok (helyfoglalók) Tulajdonságok Tárolók: Vektor (vector) Lista (list) Halmaz (set)
Feldspar: Nyelv digitális jelfeldolgozáshoz
Feldspar: Nyelv digitális jelfeldolgozáshoz Eötvös Loránd Tudományegyetem, Budapest Támogatja: Ericsson, KMOP-1.1.2-08 Feldspar funkcionális beágyazott nyelv Feldspar digitális jelfeldolgozáshoz párhuzamossághoz
Alkalmazott modul: Programozás
Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás Feladatgyűjtemény Összeállította: Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Frissítve: 2015.
Tuesday, March 6, 12. Hasító táblázatok
Hasító táblázatok Halmaz adattípus U (kulcsuniverzum) K (aktuális kulcsok) Függvény adattípus U (univerzum) ÉT (értelmezési tartomány) ÉK (érték készlet) Milyen az univerzum? Közvetlen címzésű táblázatok
Virtuális függvények (late binding)
Virtuális függvények (late binding) Miskolci Egyetem Általános Informatikai Tanszék Virtuális függvények CPP5 / 1 Azonos nevű függvények megkülönböztetése paraméterszignatúra (függvény overloading) - egy
Adatbázis-lekérdezés. Az SQL nyelv. Makány György
Adatbázis-lekérdezés Az SQL nyelv Makány György SQL (Structured Query Language=struktúrált lekérdező nyelv): relációs adatbázisok adatainak visszakeresésére, frissítésére, kezelésére szolgáló nyelv. Születési
Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN
Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN B IT v: 2016.03.03 MAN Csomagok A DBMS csomagok a PL/SQL alkalmazások fejlesztését segítik, bennük tároljuk a létrehozott programok kódjait. A specifikációs
Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs
Fordított és szkript nyelvek összehasonlító elemzése Sergyán Szabolcs IEEE: The 2016 Top Programming Languages IEEE: The 2016 Top Programming Language (Enterprise) Kutatás-fejlesztésben használt nyelvek
Bevezetés a Programozásba II 12. előadás. Adatszerkezetek alkalmazása (Standard Template Library)
Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 12. előadás (Standard Template Library) 2014.05.19. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto