Paradigmata programování 1

Podobné dokumenty
PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ

Paradigmata programování 1

Paradigmata programování 2

Paradigmata programování 1

Paradigmata programování 1

PARADIGMATA PROGRAMOVÁNÍ 2A INTERPRET S VEDLEJŠÍMI EFEKTY A MAKRY

Funkcionální programování úvod

FUNKCIONÁLNÍ A LOGICKÉ PROGRAMOVÁNÍ 3. CVIČENÍ

1. Od Scheme k Lispu

Paradigmata programování II Přednáška 2: Mutace

Jazyk Scheme: jeho syntax a sémantika

Paradigmata programování II Korutiny a nedeterminismus

Přednáška 3. Rekurze 1

Funkcionální programování. Kristýna Kaslová

Paradigmata programování 1

Paradigmata programování II Přednáška 1: Vedlejší efekt

PARADIGMATA PROGRAMOVÁNÍ 2A MAKRA I

PARADIGMATA PROGRAMOVÁNÍ 2 KORUTINY, NEDETERMINISMUS

PARADIGMATA PROGRAMOVÁNÍ 2A VEDLEJŠÍ EFEKT

PARADIGMATA PROGRAMOVÁNÍ 2A MUTACE

Paradigmata programování II Přednáška 6: Líné vyhodnocování, proudy a kešované vyhodnocování

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

Matematická analýza pro informatiky I.

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

7. Funkce jedné reálné proměnné, základní pojmy

PROGRAMY PRO GIS. Formovat/formulovat problém pro aplikaci v počítači. Fungování GIS programů na základní úrovni - "uvažovat" jako počítač

Logické programování

ALGORITMIZACE A PROGRAMOVÁNÍ

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

Výroková a predikátová logika - III

Základní datové struktury

Paradigmata programování 1 poznámky k přednášce. 3. Rekurze 1

2 Datové typy v jazyce C

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Hanojská věž. T2: prohledávání stavového prostoru. zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3]

PARADIGMATA PROGRAMOVÁNÍ 2A MAKRA III

Denotační sémantika. Marek Běhálek

Lineární algebra : Polynomy

Výroková a predikátová logika - II

Funkční objekty v C++.

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

(pracovní verze textu určená pro studenty)

Prolog PROgramming in LOGic část predikátové logiky prvního řádu rozvoj začíná po roce 1970 Robert Kowalski teoretické základy Alain Colmerauer, David

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

15. KubickÈ rovnice a rovnice vyööìho stupnï

MATURITNÍ TÉMATA Z MATEMATIKY

POŽADAVKY pro přijímací zkoušky z MATEMATIKY

Kapitola 7: Integrál. 1/17

Polynomy a racionální lomené funkce

Stefan Ratschan. Fakulta informačních technologíı. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

8 Třídy, objekty, metody, předávání argumentů metod

Učitelství 1. stupně ZŠ tématické plány předmětů matematika

přetížení operátorů (o)

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

13. Kvadratické rovnice 2 body

KMA/MDS Matematické důkazy a jejich struktura

Výroková a predikátová logika - II

Kapitola 7: Neurčitý integrál. 1/14

KMA/PDB. Karel Janečka. Tvorba materiálů byla podpořena z prostředků projektu FRVŠ č. F0584/2011/F1d

Požadavky na zápočet a zkoušku

FUNKCE A JEJICH VLASTNOSTI

Projekt OPVK - CZ.1.07/1.1.00/ Matematika pro všechny. Univerzita Palackého v Olomouci

LISP Definice funkcí

Úvod do informatiky. Miroslav Kolařík

II. 3. Speciální integrační metody

Y36BEZ Bezpečnost přenosu a zpracování dat. Úvod. Róbert Lórencz. lorencz@fel.cvut.cz

Matematika I (KMI/5MAT1)

Maturitní otázky z předmětu MATEMATIKA

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

pouze u některých typů rovnic a v tomto textu se jím nebudeme až na

Negativní informace. Petr Štěpánek. S použitím materiálu M.Gelfonda a V. Lifschitze. Logické programování 15 1

teorie logických spojek chápaných jako pravdivostní funkce

Základy objektové orientace I. Únor 2010

ALGORITMIZACE PRAKTICKÉ

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

Odvozené a strukturované typy dat

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Základy algoritmizace

Sémantika predikátové logiky

Obecná rovnice kvadratické funkce : y = ax 2 + bx + c Pokud není uvedeno jinak, tak definičním oborem řešených funkcí je množina reálných čísel.

Analytická geometrie. c ÚM FSI VUT v Brně

Matematická analýza pro informatiky I. Limita posloupnosti (I)

Projekt OPVK - CZ.1.07/1.1.00/ Matematika pro všechny. Univerzita Palackého v Olomouci

Kapitola 11: Lineární diferenciální rovnice 1/15

Výpočet průsečíků paprsku se scénou

Úvod do TI - logika Predikátová logika 1.řádu (4.přednáška) Marie Duží marie.duzi@vsb.cz

Těleso racionálních funkcí

Maturitní témata z matematiky

Polynomy a interpolace text neobsahuje přesné matematické definice, pouze jejich vysvětlení

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

2 Strukturované datové typy Pole Záznam Množina... 4

Výroková a predikátová logika - VIII

MATURITNÍ OTÁZKY Z MATEMATIKY PRO ŠKOLNÍ ROK 2010/2011

Programování II. Abstraktní třída Vícenásobná dědičnost 2018/19

Matematika IV 9. týden Vytvořující funkce

FUNKCIONÁLNÍ A LOGICKÉ PROGRAMOVÁNÍ 5. CVIČENÍ

Lineární algebra : Polynomy

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Modulární aritmetika, Malá Fermatova věta.

Transkript:

Paradigmata programování 1 Tečkové páry, symbolická data a kvotování Vilém Vychodil Katedra informatiky, PřF, UP Olomouc Přednáška 4 V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 1 / 28

Přednáška 4: Přehled 1 Hierarchická data: potřeba složených dat, tečkové páry, konstruktory, selektory, implementace tečkových párů. 2 Symbolická data a kvotování: speciální forma quote, symboly jako data. 3 Vytváření abstrakcí pomocí dat: procedury vs. data, role abstrakčních bariér. V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 2 / 28

Vytváření abstrakcí pomocí dat Probrané prostředky vytváření abstrakcí: pojmenování hodnot (define,... ) vytváření procedur (lambda, prostředí,... ) Reprezentace dat v jazyku Scheme jednoduchá (atomická) data (čísla, pravdivostní hodnoty,... ) složená (hierarchická) data nový fenomén neformálně: data obsahující (jiná) data pracujeme s nimi nepřímo pomocí konstruktorů a selektorů Konstruktory: vytváří složená data z jednodušších dat Selektory: vrací jednotlivé složky složených dat V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 3 / 28

Příklad (Motivační příklad) Napište proceduru pro výpočet kořenů kvadratické rovnice ax 2 + bx + c = 0 pomocí: Představa řešení: b ± D, kde D = b 2 4ac. 2a (define koreny (lambda (a b c) (let* ((diskr (- (* b b) (* 4 a c))) (koren1 (/ (+ (- b) (sqrt diskr)) (* 2 a))) (koren2 (/ (- (- b) (sqrt diskr)) (* 2 a)))) teď bychom chtěli vrátit dvě hodnoty současně ))) Zbývá dořešit: jak vracet dvě hodnoty současně,... V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 4 / 28

Příklad (Nepříliš uspokojivé řešení) Můžeme obejít následovně: (define koreny (lambda (a b c p) (let ((diskr ((- (* b b) (* 4 a c))))) (/ ((if p + -) (- b) (sqrt diskr)) 2 a)))) Role parametru p: příznak (pravdivostní hodnota) na základě příznaku se vrací první nebo druhý kořen (proč?) Proč nám koncepčně vadí: de facto neřeší problém zbytečný (a nepřehledný) parametr navíc opakování výpočtu D V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 5 / 28

Příklad (Jiný motivační příklad racionální aritmetika) Předpokládejme, že potřebujeme implementovat sčítání racionálních čísel: Představa řešení: a b + c d ad + cb =. bd (define r+ (lambda (cit1 jmen1 cit2 jmen2) chceme předávat jen dva argumenty = dvě racionální čísla (let* ((cit (+ (* cit1 jmen2) (* cit2 jmen1))) (jmen (* jmen1 jmen2)))) teď bychom chtěli vrátit dvě hodnoty současně: cit a jmen ))) Dva problémy: vracení dvou hodnot / argumenty by měly být složené hodnoty V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 6 / 28

Příklad (Práce (třeba) s geometrickými objekty... ) Uvažujme: objekty typu bod, úsečka, kružnice,... Společné rysy: jsou geometrické objekty, mohou být reprezentovány jako složená data,... Procedury pracující s daty tohoto typu: najdi průsečík(y) přímky a kružnice (různé výsledky: bod, dva body, nic) najdi průsečík(y) dvou přímek (různé výsledky: bod, úsečka, přímka, nic). V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 7 / 28

Tečkové páry Tečkový pár nový element jazyka zapouzdřuje v sobě dva elementy (dvě hodnoty) základní reprezentant složených dat v jazyku Scheme Konstruktor páru: procedura cons (angl. construct) dva argumenty, první a druhá složka páru Selektory páru: procedury car a cdr car vrací první složku páru cdr vrací druhou složku páru Poznámka (Původ jmen) Původní implementace LISPu na počítači IBM 704. car = Contents of Address part of Register cdr = Contents of Decrement part of Register V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 8 / 28

Příklad (Použití konstruktorů a selektorů párů) (define par1 (cons 1 2)) (define par2 (cons par1 3)) 1 2 (car par1) = 1 (cdr par2) = 2 1 2 3 (car (car par2)) = 1 (car (cdr par2)) = CHYBA: Argument pro car není pár Chování car a cdr: argumenty musejí být vždy páry, v ostatních případech skončí aplikace selektorů chybou. V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 9 / 28

Příklad (Odvozené selektory párů) (define caar (lambda (p) (car (car p)))) (define cadr (lambda (p) (car (cdr p)))) (define cdar (lambda (p) (cdr (car p)))) (define cddr (lambda (p) (cdr (cdr p)))) (define caaar (lambda (p) (car (caar p)))). (caar (cons (cons 10 20) (cons 30 40))) = 10 (cdar (cons (cons 10 20) (cons 30 40))) = 20 (cadr (cons (cons 10 20) (cons 30 40))) = 30 (cddr (cons (cons 10 20) (cons 30 40))) = 40 Poznámka: caar, cadr,... jsou předdefinované až po kombinace čtyř a a d. V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 10 / 28

Externí reprezentace párů Otázka: Jak printer vypisuje výsledek (cons 1 2)? Tečkové pár skládající se ze složek A a B vypisuje reader jako ( A. B ). (cons 1 2) = (1. 2) Zkracující konvence: v případě, že druhý prvek páru je opět pár: vynechávají se závorky náležející vnitřnímu páru vynechává se tečka náležející vnějšímu. Úmluva (o jednoznačnosti externí reprezentace párů a seznamů) Tečku. v externí reprezentaci párů nepovažujeme za symbol. Důsledek: páry ( A. B ) nejsou trojprvkové seznamy. V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 11 / 28

Příklad (Externí reprezentace párů ve zkrácené formě) (cons 10 20) = (10. 20) (cons (cons 10 20) 30) = ((10. 20). 30) (cons 10 (cons 20 30)) = (10. (20. 30)) = (10 20. 30) (cons (cons 10 (cons 20 30)) 40) = ((10. (20. 30)). 40) = ((10 20. 30). 40) (cons 10 (cons (cons 20 30) 40)) = (10. ((20. 30). 40)) = (10 (20. 30). 40) (cons (cons 10 20) (cons 30 40)) = ((10. 20). (30. 40)) = ((10. 20) 30. 40) Příklad (Co nejsou externí reprezentace párů) (10. ) (. 20) (10. 20. 30) (10. 20 30) V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 12 / 28

Příklad (Páry v boxové notaci) 10 20 10 20 30 10 20 30 40 (10. 20) ((10. 20). 30) ((10 20. 30). 40) 10 20 30 40 10 20 30 40 (10 (20. 30). 40) ((10. 20) 30. 40) V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 13 / 28

Páry jako elementy prvního řádu Definice (element prvního řádu) Element prvního řádu je každý element jazyka, pro který platí: 1 element může být pojmenován, 2 element může být předán proceduře jako argument, 3 element může vzniknout aplikací (voláním) procedury, 4 element může být obsažen v hierarchických datových strukturách. Příklad (Procedura vracející pár; pár obsahující proceduru) (define a (lambda () (cons a #f))) (a) = ( procedura. #f) (car (a)) = procedura ((car (a))) = ( procedura. #f) (car ((car (a)))) = procedura V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 14 / 28

Rozšíření readeru Definice (Rozšíření S-výrazů) Jsou-li e, f, e 1, e 2,..., e n symbolické výrazy (n 0), pak (e e 1 e 2 e n. f) je symbolický výraz. Pokud je n = 0, symbolický výraz (e. f) nazveme pár. Dva pojmy, nutno rozlišovat: pár jako element jazyka (hierarchická data), pár jako symbolický výraz. Důsledky: Element pár je interní reprezentace symbolického výrazu pár. Externí reprezentace (pouze) některých elementů pár jsou symbolické výrazy (pár). viz předchozí příklad jako protipříklad V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 15 / 28

Implementace párů pomocí procedur vyšších řádů Problém: Lze reprezentovat hierarchická data i bez existence párů? Ano: pomocí procedur vyšších řádů + lexikálního rozsahu platnosti Příklad (Kořeny kvadratické rovnice bez použití párů) (define koreny (lambda (a b c) (let* ((diskr (- (* b b) (* 4 a c))) (koren1 (/ (+ (- b) (sqrt diskr)) (* 2 a))) (koren2 (/ (- (- b) (sqrt diskr)) (* 2 a)))) (lambda (prvni-nebo-druhy) (if prvni-nebo-druhy koren1 koren2))))) vrácená hodnota je procedura (jednoho argumentu), využití let*-o-λ V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 16 / 28

Příklad (Získání kořenů) (define koreny (lambda (a b c) (let* ((diskr (- (* b b) (* 4 a c))) (koren1 (/ (+ (- b) (sqrt diskr)) (* 2 a))) (koren2 (/ (- (- b) (sqrt diskr)) (* 2 a)))) (lambda (prvni-nebo-druhy) (if prvni-nebo-druhy koren1 koren2))))) (koreny 1-2 2) = procedura (define oba-koreny (koreny 1-2 2)) (oba-koreny #t) = 1+i (oba-koreny #f) = 1-i V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 17 / 28

Příklad (Aplikace postupu pro vytvoření reprezentace párů) (define cons (lambda (x y) (lambda (k) (if k x y)))) ((cons 1 2) #t) = 1 ((cons 1 2) #f) = 2 (define car (lambda (p) (p #t))) (define cdr (lambda (p) (p #f))) (define p (cons 2 3)) p = procedura (car p) = 2 (cdr p) = 3 V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 18 / 28

Definitivní implementace párů pomocí procedur vyšších řádů Čistší řešení pomcí projekcí: (define cons (lambda (x y) (lambda (proj) (proj x y)))) (define 1-z-2 (lambda (x y) x)) (define 2-z-2 (lambda (x y) y)) (define car (lambda (p) (p 1-z-2))) (define cdr (lambda (p) (p 2-z-2))) procedury vyšších řádů + lexikální rozsah platnosti = hierarchická data kde jsou data vlastně ukrytá? jak vypadaji prostředí behem aplikace? V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 19 / 28

Speciální forma quote Speciální forma quote vrací svůj argument v nevyhodnocené podobě: Definice (speciální forma quote) Speciální forma quote se používá s jedním argumentem (quote arg ). Výsledkem aplikace této speciální formy je přímo arg (bez vyhodnocení). Příklad (Použití quote) (quote 10) = 10 (quote yellow) = yellow (quote (a. b)) = (a. b) V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 20 / 28

Kvotování, zkrácená forma použití quote Zkrácená forma: metasyntaktický znak apostrof ' Příklad (Stejný efekt jako v předchozím příkladě) '10 = 10 'yellow = yellow '(a. b) = (a. b) Poznámka: je zbytečné kvotovat čísla (obecně: elementy vyhodnocující se na sebe sama), quote nemůže být procedura, reader expanduje výrazy ' A na výrazy (quote A ) apostrof ' není symbol stejně jako tečka. terminus technicus syntaktický cukr V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 21 / 28

Příklad (Příklady kvotovaných výrazů) Symbol procedura (define plus +) (plus 1 2) = 3 plus = procedura sčítání čísel (define plus '+) (plus 1 2) = CHYBA: + není procedura ani speciální forma. plus = + Symbol vyhodnocující se na sebe sama (často používané v Common LISPu) (define blah 'blah) blah = blah V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 22 / 28

Vytváření abstrakčních bariér pomocí dat Připomenutí: bottom-up metoda vývoje programu: postupně obohacujeme jazyk přidáváním nových procedur (a hierarchických datových struktur), rozvrstvení do několika (nezávislých) vrstev (možnost reimplementace), snaha: vytvořit bohatý jazyk pro snadné vyřešení výchozího problému. Pojmy spojené s metodou bottom-up a datovou abstrakcí: černá skříňka (black box) vychází z toho, že reprezentace dat jsou implementovány po vrstvách, z vyšší vrstvy se díváme na data v nižších vrstvách jako na černé skříňky, nezajímá nás fyzická organizace dat na nižších vrstvách, zajímá nás pouze: jak vypadají konstruktory a selektory dat, snadná možnost záměny jedné vrstvy za druhou. abstrakční bariéra pomyslný mezník mezi dvěma vrstvami programu, V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 23 / 28

Příklad (Abstrakční bariéry v příkladu s kořeny kvadratické rovnice) práce s kvadratickými rovnicemi najdi-koreny, dvojnasobny? základní operace s dvojicemi kořenů vrat-koreny, prvni-koren, druhy-koren implementace dvojice kořenů pomocí tečkových párů cons, car, cdr implementace tečkových párů V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 24 / 28

Příklad (Implementace bariér v příkladu s kořeny kvadratické rovnice) (define vrat-koreny cons) (define prvni-koren car) (define druhy-koren cdr) (define najdi-koreny (lambda (a b c) (let ((diskr (- (* b b) (* 4 a c)))) (vrat-koreny (/ (- (- b) (sqrt diskr)) 2 a) (/ (+ (- b) (sqrt diskr)) 2 a))))) (define dvojnasobny? (lambda (koreny) (= (prvni-koren koreny) (druhy-koren koreny)))) V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 25 / 28

Příklad (Abstrakční bariéry v příkladu s racionální aritmetikou) práce s racionálními čísly r+, r-, r*, r/, r<, r>, r=,... implementace operací a predikátů nad racionálními čísly make-rat, numer, denom implementace racionálních čísel cons, car, cdr implementace tečkových párů V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 26 / 28

Příklad (Fragment počáteční implementace) (define make-r (lambda (x y) (cons x y))) (define numer (lambda (x) (car x))) (define denom (lambda (x) (cdr x))) (define r+ (lambda (x y) (make-r (+ (* (numer x) (denom y)) (* (denom x) (numer y))) (* (denom x) (denom y))))). V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 27 / 28

Příklad (Příklad reimplementace vrstvy) (define make-r (lambda (x y) (let ((g (gcd x y))) (cons (/ x g) (/ y g))))) Přidaná hodnota: kvalitativní změna programu malým zásahem do jedné vrstvy (patologicky) neovlivňuje procedury na dalších vrstvách V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování Přednáška 4 28 / 28