PB006 Principy programovacı ch jazyku pozna mky



Podobné dokumenty
Principy programovacích jazyků PB006 PB006 1

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

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Úvod do programovacích jazyků (Java)

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

PB161 Programování v jazyce C++ Přednáška 7

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

PB161 Programování v jazyce C++ Přednáška 7

Struktura programu v době běhu

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

Logika a logické programování

Funkcionální programování

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Maturitní otázky z předmětu PROGRAMOVÁNÍ

IB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada

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

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Okruh č.3: Sémantický výklad predikátové logiky

Teoretické minimum z PJV

Programovací jazyk Pascal

4.2 Syntaxe predikátové logiky

Sdílení dat mezi podprogramy

0. ÚVOD - matematické symboly, značení,

Predikátová logika. prvního řádu

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

Logické programy Deklarativní interpretace

IB111 Úvod do programování skrze Python Přednáška 13

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Matematika v programovacích

1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

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

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

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

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

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

O datových typech a jejich kontrole

platné nejsou Sokrates je smrtelný. (r) 1/??

Úvod. Programovací paradigmata

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

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

IB015 Neimperativní programování. Organizace a motivace kurzu, programovací jazyk Haskell. Jiří Barnat

Matematická logika. Miroslav Kolařík

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

IB111 Programování a algoritmizace. Programovací jazyky

Logické programování

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

TÉMATICKÝ OKRUH Softwarové inženýrství

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Unární je také spojka negace. pro je operace binární - příkladem může být funkce se signaturou. Binární je velká většina logických spojek

PB161 Programování v jazyce C++ Přednáška 4

IB015 Neimperativní programování. Seznamy, Typy a Rekurze. Jiří Barnat Libor Škarvada

Modely Herbrandovské interpretace

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Matematická analýza 1

DTP Základy programování Úvod do předmětu

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

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

Matematická logika. Miroslav Kolařík

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Databázové systémy. * relační kalkuly. Tomáš Skopal. - relační model

Algoritmizace a programování

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Predikátová logika. Teoretická informatika Tomáš Foltýnek

11. Přehled prog. jazyků

Teoretická informatika Tomáš Foltýnek Teorie čísel Nekonečno

10. Techniky formální verifikace a validace

typová konverze typová inference

Ukazka knihy z internetoveho knihkupectvi

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Teorie množin. Čekají nás základní množinové operace kartézské součiny, relace zobrazení, operace. Teoretické základy informatiky.

Více o konstruktorech a destruktorech

Matematická logika. Rostislav Horčík. horcik

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Základy objektové orientace I. Únor 2010

Sémantika predikátové logiky

Programování II. Modularita 2017/18

Sémantika Tabulka symbolů Intermediální kód Typová kontrola, přetypování Statická a dynamická sémantika. Sémantická analýza.

Deskripční logika. Petr Křemen FEL ČVUT. Petr Křemen (FEL ČVUT) Deskripční logika 37 / 157

Každé formuli výrokového počtu přiřadíme hodnotu 0, půjde-li o formuli nepravdivou, a hodnotu 1, půjde-li. α neplatí. β je nutná podmínka pro α

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

5 Přehled operátorů, příkazy, přetypování

Základní pojmy teorie množin Vektorové prostory

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

postaveny výhradně na syntaktické bázi: jazyk logiky neinterpretujeme, provádíme s ním pouze syntaktické manipulace důkazy

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Logické programování I

Bakalářská matematika I

Moderní technologie ve studiu aplikované fyziky CZ.1.07/2.2.00/ Množiny, funkce

1. Dědičnost a polymorfismus

Objektově orientovaný přístup

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

Úvod do programovacích jazyků (Java)

Transkript:

PB006 Principy programovacı ch jazyku pozna mky - Výpisky ze slidů pana Škarvady. V podstatě nic není navíc, spíš se jedná o zkrácení a přeformátování. Za bezchybnost neručím! 1 Úvod 1.1 Aspekty programovacího jazyka - Pragmatika o vztah k výpočtu o implementace kompilátoru, interpretu, o oblast nasazení - Syntax o struktura a forma programů v jazyce o popsána formální gramatikou ve třech úrovních (lexikální, bezkontextová, kontext omezení) - Sémantika o význam o vztah mezi programem a výpočetním modelem 2 Syntax - Popsána formální gramatikou G = (N, Σ, P, S), - V případě programovacích jazyků bývá bezkontextová, tj. o P (N (N Σ) + ) {(S, ε)}. Page 1 of 20

2.1 Konkrétní syntax - definuje vlastní jazyk - dostatečně mnoho terminálů 2.1.1 Lexikální syntax (mikrosyntax) o k vymezení množiny lexikálních atomů (tvoří slovník ) o popsána regulární nebo jednoduchou bezkontextovou gramatikou o terminály znaky 2.1.2 Frázová syntax (makrosyntax) o popisuje úplnou strukturu programu (tvoří množinu správně vytvořených vět) o popsána bezkontextovou gramatikou o terminály lexikální atomy 2.1.3 Kontextová omezení (statická sémantika) o podmínky vymezující podmnožinu jazyka (pravidla vylučující syntakticky správné, ale nesmyslné věty) 2.2 Abstraktní syntax - popisuje strukturu - nezávislá na konkrétní reprezentaci - obsahuje hlavně neterminály 3 Typy 3.1 Pojetí typů - množiny hodnot - heterogenní algebry => množiny hodnot spolu s operacemi na nich - variety heterogenních algeber => množiny s operacemi a axiomy 3.2 Typy a typové konstruktory 3.2.1 Kartézský součin (A B) - Množina všech uspořádaných dvojic (a, b) takových, že a A, b B. - Projekční funkce (selektory): o fst A B A o fst (x, y) = x o snd A B B o snd (x, y) = y 3.2.2 Disjunktní sjednocení (A + B) - Sjednocení množiny všech dvojic (L, a) s množinou všech dvojic (R, b), kde a A, b B. L, R jsou příznaky původu prvku a, b. - Inserční funkce (konstruktory): o inl A A + B o inl x = (L, x) o inr B A + B o inr y = (R, y) Page 2 of 20

3.2.3 Pole - Zobrazení (konečného) ordinálního typu I do typu T. o Konečný typ je ordinální existuje bijekce ord I {1,, n}, kde n = I. - Zápis: Array I T 3.2.4 Funkce - Zápis: A B - f(x, y) g x y 3.2.5 Potenční množiny - Set A typ všech podmnožin A - A Bool typ všech predikátů nad A - Každé hodnotě a Set A odpovídá charakteristická funkce χ a A Bool taková, že pro každé x A platí x a χ a (x) = true. 3.2.6 Prázdný typ - disjunktní sjednocení nulového počtu typů - Void, - Neobsahuje žádnou hodnotu. 3.2.7 Jednotkový typ - kartézský součin nulového počtu prvků - Unit, - Má jedinou hodnotu uspořádanou nultici (). 3.2.8 Výčtové typy - Případ disjunktního sjednocení všechny inserce jsou typu Unit T. 3.2.9 Rekursivní (induktivní) typy - Je-li F(t) zápis typů obsahující typovou proměnnou t, pak μ t. F(t) je (množinově nejmenší typ vyhovující rovnici t = F(t). - T = μ t. F(t) ~ T = F(T) - např. konečné seznamy 3.2.10 Korekursivní (koinduktivní) typy - Je-li F(t) zápis typů obsahující typovou proměnnou t, pak ν t. F(t) je (množinově největší typ vyhovující rovnici t = F(t). - T = ν t. F(t) ~ T = F(T) - např. nekonečné seznamy 3.3 Monomorfismus a polymorfismus 3.3.1 Monomorfní typu - a) základní typy - nebo - b) Pomocí typových konstruktorů složené z monomorfních typů. 3.3.2 Polymorfní typy - Zastupují celou množinu monomorfních typů. Page 3 of 20

3.3.2.1 Parametrický polymorfismus - V typových výrazech se vyskytují typové proměnné, za něž lze dosadit libovolný typ. - př. b. Array (0..9)b 3.3.2.2 Podtypový (inklusivní) polymorfismus - Na množině typů je zavedeno uspořádání : a každá hodnota má kromě svého nejmenšího typu i všechny jeho nadtypy. - A : B A je podtypem B - Pravidlo subsumpce o Nechť A : B, a je typu A, potom také a je typu B. o Zápis: a A A : B a B - Kovariace o Typový konstruktor S je kovariantní, když A : A S A : S A o Příklad typový konstruktor Set. σ : σ Set σ : Set σ Přirozené číslo je celým číslem, tedy i množina přirozených čísel je množinou celých čísel. - Kontravariace o Typový konstruktor T je kontravariantní, když A : A T A : T A o Příklad typový konstruktor Predicate. Predicate α = α Bool. σ : σ Predicate σ : Predicate σ Přirozené číslo je celým číslem, tedy predikát nad celými čísly je predikátem nad přirozenými čísly. - Kovariace a kontravariace u typových konstruktorů větší arity o se zavádí zvlášť pro každý parametr. o n-ární typový konstruktor S je ve svém i-tém typovém parametru (1 i n) kovariantní, když A i : A o o S A 1 A n : S A 1 A i 1 A A i+1 A n n-ární typový konstruktor T je ve svém i-tém A 1 A i 1 typovém parametru (1 i n) kontravariantní, když A : A T A 1 A i 1 A A i+1 A n : T A 1 A n Příklad Typový konstruktor je v prvním parametru kontravariantní a ve druhém parametru kovariantní. 3.4 Přetížení - Symbol je přetížený, označuje-li více hodnot různých typů. Page 4 of 20

- Kontextově nezávislé o Funkce lze vyřešit jen z typu argumentů. - Kontextově závislé o Typy argumentů nestačí, bere se širší kontext. - Symbol g je přetížen dvěma různými typy σ 1 τ 1, σ 2 τ 2. o Kontextově nezávislé musí být σ 1 σ 2. o Kontextově závislé musí být τ 1 τ 2. 3.5 Koerce - implicitní zobrazení hodnot jednoho typu do hodnot jiného typu 3.6 Druhy - Druhy slouží ke klasifikaci typů, typových konstruktorů, typových funkcí apod. - Symbol značí druh všech typů. 3.7 Hodnotově závislé typy - Typové konstruktory parametrizovány typy + hodnotami. - Příklad vektor o Typ Vec n všech n-složkových vektorů reálných čísel. o Vec Nat - Používáno hlavně akademickými jazyky: o Agda, Cauenne, 4 Sémantika - Přiřazuje významy programům nebo jejím částem. 4.1 Formální sémantika 4.1.1 Operační sémantika - Množinou pravidel popisujících výpočet abstraktního počítače výsledek výpočtu je významem programu. - Rozlišujeme: o strukturní (sos) o přirozená (bos) 4.1.2 Axiomatická sémantika - Množina tvrzení (tzv. teorie) o nějakém systému, v nemž probíhá výpočet. - Zejména u imperativních jazyků tvrzení se vyjadřují o stavech. 4.1.3 Denotační sémantika - Definována na programech a komponentách explicitně množina funkcí přiřazujících částem programů význam. - Přiřazení prvků sémantických domén programovým konstrukcím. Page 5 of 20

- Příklad: o P množina konstrukcí o MVar množina (přepisovatelných) proměnných o V množina hodnot o S = MVar V množina stavů o _ _ P S S stavový transformátor o M _ _ P S V významová funkce o o x + + σ = σ, kde M x + + σ = σ(x) σ (x) = σ(x) + 1 y, y x. σ (y) = σ(y) 4.1.3.1 Nedeterministická sémantika o 4.1.3.2 Deterministická sémantika - Významem výrazu e je jeho hodnota (prvek sémantické domény). - V imperativních jazycích závisí sémantika výrazu na stavu σ S, takže M e S Val - Význam výrazu e ve stavu σ je hodnota M e σ Val. - V jazycích bez vedlejších efektů, ale s proměnnými závisí sémantika výrazů na tzv. hodnotovém kontextu ε Env. Potom M e Env Val - Význam výrazu e ve stavu ε je hodnota M e ε Val. - Příklad: o M 0 σ = 0 o M 1 σ = 1 o o M e 1 + e 2 σ = M e 1 σ + M e 2 σ o M e 1 e 2 σ = M e 1 σ M e 2 σ M e 2 σ, pokud M e 1 σ = tt o M if e 1 then e 2 else e 3 σ = M e 3 σ, pokud M e 1 σ = ff, jinak 4.2 Výrazy - Literály označují hodnoty - Jména konstanty, parametry fcí, proměnné - Výrazy popisující hodnoty složených typů - Podmíněné výrazy -- if then else, case of - Aplikace funkce na argumenty (volání funkce) - Abstrakce ( uzávěry ) - Příkazy Page 6 of 20

4.3 Funkcionální a procedurální abstrakce - Funkcionální abstrakce se provádí nad výrazem některé jeho (volné) proměnné se prohlásí za parametry výsledné funkce. - Počet těchto parametrů určuje tzv. aritu. - Procedurální abstrakce se provádí podobně nad příkazem. - Příklad: o float sqr (float x) { return x x; } 4.4 Proměnné 4.4.1 Funkcionální, logické - Čisté proměnné (v matematickém smyslu), - označují hodnotu, - slouží i k označení parametrů fcí. 4.4.2 Imperativní - Přepisovatelné proměnné, - označují paměťové místo. - Paměťové místo je úložiště hodnoty. - Ve většině jazyku se však jménem proměnné označuje i daná hodnota ( automatické dereferencování). 4.5 Příkazy - Významem příkazu je stavový transformátor s S S. - MVar množina program. proměnných reprezentujících paměťová místa - Val množina hodnot, která mohou být do těchto míst uloženy - σ MVar Val stav - S množina všech stavů - Je-li p příkaz, pak se jeho stavový transformátor značí p S S. 4.5.1 Příkazy obsahující výrazy BEZ VEDLEJŠÍCH EFEKTŮ Page 7 of 20

Page 8 of 20

4.5.2 Příkazy obsahující výrazy S VEDLEJŠÍMI EFEKTY - Připustíme, aby příkazy (výrazy typu Command) byly podvýrazy výrazů jiného typu. - Pak jsou všechny výrazy stavovými transformátory e S S, ale kromě toho vracejí hodnotu M e S Val. - Například v C ve stavu σ, σ(x) = 5, je o x + + σ = σ, σ (x) = 6, σ (y) = σ(y) pro y x o M x + + σ = 5 Page 9 of 20

4.6 Řadící příkazy - Skoky o Explicitní přenesení řízení výopčtu do jiné části programu. - Úniky o Ukončují provádění složeného příkazu, který unikový příkaz obsahuje. - Vyjímky 4.7 Volání funkce a předávání parametrů - Aplikace funkce na argumenty = tzv. volání funkce. 4.7.1 Volání hodnotou 4.7.2 Volání jménem - Implementuje se pomocí nulárních (bezparametrických) funkcí pro každý skutečný parametr předávaný jménem -- tzv. thunks. Page 10 of 20

4.7.3 Volání dle potřeby líná aplikace - Varianta volání jménem, argumenty se ale vyhodnocují nejvýše jednou. - U referenčně transparentních jazyků jazyky bez vedlejších efektů. - Počet vyhodnocování argumentů: o volání hodnotou 1 o volání jménem 0 n o volání dle potřeby 0 1 4.7.4 Volání odkazem - Skutečné parametry smějí být jen (adresovatelná) paměťová místa (Ref T). - Neprovádí se jejich implicitní dereferencování. Page 11 of 20

4.7.5 Volání výsledkem - Skutečné parametry jsou typu Ref a, tj. adresovatelná paměťová místa. 4.7.6 Volání hodnotou-výsledkem - Skutečné parametry jsou typu Ref a, tj. adresovatelná paměťová místa. 4.7.7 Smíšené volání hodnotou, výsledkem, hodnotou-výsledkem - Víceparametrická funkce své parametry vyhodnocuje různými způsoby, podle předpisu v hlavičce funkce. 4.7.8 Shrnutí typů volání (není ze slidů, nezaručuji 100% správnost) - Volání jménem: o Argument není vyhodnocen před voláním funkce. o Je substituován přímo do funkce, tzn. je pokaždé vyhodnocován pouze v místech, kde se ve funkci objevuje. Page 12 of 20

o Použití v C: Pomocí ukazatele na unární funkci (viz příklad výše). - Volání hodnotou: o Argument je vyhodnocen a výsledná hodnota je zkopírována do odpovídající proměnné ve funkci. o Změny proměnné ve funkci se mimo ní neprojeví. o Použití v C: defaultní volání - Volání odkazem: o Změny obsahu přepisovatelné proměnné určené formálním parametrem, mění současně obsah proměnné, která je skutečným argumentem při volání. o Změny proměnné ve funkci se okamžitě projevují i mimo ní. o Použití v C: Předání odkazem na proměnnou. (Popřípadě v C++ předáním referencí.) - Volání hodnotou-výsledkem: o Změny obsahu přepisovatelné proměnné určené formálním parametrem, se dějí pouze lokálně a obsah skutečného argumentu se změní až v okamžiku návratu. o Změny proměnné ve funkci se mimo funkci projeví až po návratu. - Volání výsledkem: o Argument je neinicializovaný, resp. může být inicializovaný, ale jeho hodnota není v těle funkce brána v potaz (například tím, že hodnota formální proměnné je inicializována v těle funkce na určitou hodnotu, která není závislá na hodnotě skutečné proměnné). o Není důležitá hodnota proměnné při volání funkce + hodnota se do proměnné zapíše až po návratu z funkce. - Pozor na rozdíl mezi voláním odkazem a voláním hodnotou-výsledkem může mít vliv na výsledný stav. 5 Viditelnost 5.1 Viditelnost jazykových entit - Statická o Pro každou definici jazykové entity (konstanty, proměnné, ) je statickou sémantikou určena oblast platnosti definice. - Dynamická o Viditelnost jazykových entit závisí na momentálně aktivních programových jednotkách (blocích, funkcích, ) v době běhu. o Téměř nepoužívaná (Lisp, Snobol). 5.2 Třídy a objekty - Objekt o Modul s privátními proměnnými (atributy) a veřejnými operacemi (metodami). - Třída o ( generický objekt ) popisuje typ objektu. o Vlastní objekty se nazývají instance třídy. Page 13 of 20

5.2.1 Dědičnost - Třída A je podtřídou třídy B (značíme A B), když dědí metody třídy B a případně přidává další. - Jednoduchá každá třída má nejvýše jednu bezprostřední nadtřídu. - Násobná (jinak). 5.3 Vlastnosti OO jazyků - Třídy a objekty (statické nebo dynamické). - Dědičnost a inkluzní polymorfismus o typový systém s podtypy a A, A : A a A - Viditelnost omezená na objekty o Řízená pomocí public/protecte/private. - V (dynamických) objektech mohou být atributy i metody o statické definované ve třídách o dynamické definované v objektech - Jazyky: o Simula 67 Považován za nejstarší jazyk, v němž se objevily některé principy OO programování. o Smalltalk První čistě objektový OO jazyk; netypovaný. o Eiffel Čistě objektový, typovaný. o C++ Není čistě objektové. o Java Není čistě objektová (má i primitivní typy). o Python, Ruby Interpretovaný bytový kód. o Ada Staticky typovaná, na zakázku MO USA v 70. letech. o OCaML Objektová verze funkcionálního ML. 6 Správa paměti 6.1 Paměťové třídy dat 6.1.1 Persistentní data - Existují nezávisle na výpočtu. - Obvykle na vnějších paměťových médiích (soubory, databáze). 6.1.2 Transientní data - Existují pouze po dobu výpočtu. - Obvykle v procesem adresovatelné části operační paměti (hodnoty proměnných, ), ale i vně (dočasné soubory, ). Page 14 of 20

- Statická - Automatická (zásobníková) - Dynamická (haldová) 6.2 Správa paměti 6.2.1 Statická - Prováděná překladačem. - [Instrukce programu, systémová data, statická data, vyrovnávací paměti, ] 6.2.2 Zásobníková - V době výpočtu při zajájení/ukončení aktivace procedury, bloku, - [lokální data v blocích, parametry funkcí a procedur, pomocné datové struktury ve funkcích, návratové adresy, ] 6.2.3 Dynamická - V době výpočtu, prováděna speciálními procedurami pro alokaci, dealokaci, přesouvání, scelování, - 1. řízena explicitně programem [malloc, free, ] - 2. spouštěná výhradně run-time podporou výpočtu [garbage collectiong, setřásání] 6.3 Fáze správy paměti - alokace - dealokace - obnovení volné paměti - scelování (změna polohy obsazených a volných bloků) 6.4 Správa dynamické paměti - Inicializace vytvoření seznamu volných bloků - Alokace bloku (požadované velikosti) - Uvolnění bloku může způsobit vznik slepého odkazu nebo smetí - Úklid smetí (garbage collection) o bloky mají příznak dostupnosti (1 bit) o nastaví se na nedostupné o postupuje se od známých ukazatelů a všechny navštívené bloky se označí dostupné o nedostupné bloku se dají do seznamu volných - Scelování (spojování sousedních volných bloků) - Setřásání (úplné scelování) způsobí změny ukazatelů Page 15 of 20

7 Paradigmata - Deklarativní paradigma o Program popisuje, co je výsledkem. o Funkcionální program je výraz a výpočet je jeho úprava. o Logické program je teorie a výpočet je odvozen z ní. - Imperativní paradigma o Program popisuje, jak se dospěje k výsledku. o Procedurální výpočet je provádění procedur nad daty. o Objektové výpočet je předávání zpráv mezi objekty. 7.1 Logické paradigma - Vztahy mezi hodnotami pomocí tzv. Hornových klausulí. - Program se skládá ze seznamu klausulí (teorie) a z formule (cíle, dotazu). - Abstraktní syntax: o Program ::== Klausule* Formule o Klausule ::== Formule :- Formule* o Formule ::== Pred (Term*) o Term ::== Var Fun (Term*) - Kontextová omezení (Statická sémantika) o Predikátové a funkční symboly mají konsistentní arity. o Levá strana (tj. závěr) implikace se nazývá hlava klausule. o Předpoklady implikace se nazývají podcíle. o Klausule s nulovým počtem podcílů je tzv. fakt. o o Proměnné v klausuli, které jsou na levé straně univerzálně kvantifikovány. Ostatní proměnné, které jsou jen na pravé straně existenčně kvantifikovány. 7.1.1 Termy - Zero nulární funkční symbol (konstanta). - Succ unární funkční symbol. - Uzavřené termy: o Zero o Succ(Zero) o Succ(Succ(Zero)) o - Termy s proměnými o Succ(x) o Succ(Succ(Succ(y))) o 7.1.2 Klauzule - LessThan Zero, Succ(y). - LessThan Succ(x), Succ(y) LessThan(x, y). Page 16 of 20

7.1.3 Dotaz - LessThan(x, Succ(Succ(Zero))). 7.2 Sémantika logického programu 7.2.1 Substituce - Subst je množina všech substitucí, tj. konečných zobrazení o σ Var f GTerm, - kde GTerm = {τ Term τ neobsahuje proměnné} je množina všech tzv. uzavřených termů. - Substituci σ lze rozšířit na termy rozšířená substituce σ Term GTerm. 7.2.2 Logické jazyky - Prolog o 70. léta o netypovaný jazyk o plochá struktura a viditelnost: všechny predikáty jsou globální všechny proměnné jsou lokální (v klauzuli) o není čistě logický - Gödel o 90. léta o typovaný jazyk o modulární struktura o parametrický polymorfismus - Mercury o polovina 90. let o multiparadigmatický jazyk (logický + funkcionální) 7.2.3 Aplikace logického programování - zpracování přirozeného jazyka - simulace - symbolická manipulace s výrazy, řešení rovnic - Výhody o vyšší úroveň o logika programu oddělena od řízení výpočtu - Nevýhody o efektivita o nevýhodné pro aplikace s intenzivním I/O 7.3 Funkcionální paradigma - Nerozlišuje stavy, výpočet je jednostavový. o Nemá přepisovatelné proměnné. - parametrický polymorfismus, typové a konstruktorové třídy - uživatelské typy - líné vyhodnocování, nekonečné datové struktury Page 17 of 20

7.3.1 Sémantika - Hodnotový kontext (prostředí) o ε Var Val - Env množina všech hodnotových kontextů - Sémantická funkce o M Term Env Val - Val sémantická doména 7.3.2 CPO - CPO je uspořádaná množina, v níž má každý nejvýše spočetný řetězec supremum. - Každá spojitá funkce je monotónní. (Obrácená věta neplatí.) - Každá monotónní funkce na konečné doméně je spojitá. 7.3.3 Sémantické domény - Primitivní, tzv. ploché: o Unit, Bool, Nat, Integer, Char 7.3.4 Sémantika konstant - nezávisí na hodnotovém kontextu ε. Page 18 of 20

7.3.5 Sémantika výrazů 7.3.6 Funkcionální jazyky - LISP o konec 50. let o jednoduchá syntax, stejná pro data i algoritmy o není čistě funkcionální o netypovaný o dynamická viditelnost o dialekty: AutoLisp, elisp, - Scheme o konec 50. let o netypovaný jazyk o statická viditelnost o striktní vyhodnocování o streamy - ML o konec 70. let o typovaný jazyk o striktní vyhodnocování o dialekty: CaML, OCaML - Erlang o dynamicky typovaný jazyk o striktní vyhodnocování o konstrukce pro podporu paralelního vyhodnocování Page 19 of 20

- Hope, Clean, Orwell, Miranda o konec 80. let o vesměs líně vyhodnocované o používané ve výuce - Opal o 90. léta o čistě funkcionální o modulární o striktně vyhodnocovaný - Haskell o čistě funkcionální o modulární o líně vyhodnocovaný o čisté začlenění imperativních konstrukcí do referenčně transparentního jazyka pomocí monadických typů a operací - Cayenne, Agda, Epigram o experimentální jazyky o velmi silný (tedy nerozhodnutelný) typový systém Page 20 of 20