JUI - 2. přednáška Základní funkce, definice funkcí RNDr. Jiří Dvořák, CSc.

Slides:



Advertisements
Podobné prezentace
Deduktivní soustava výrokové logiky
Advertisements

VISUAL BASIC Práce s řetězci Použitá literatura: Kvoch: Visual Basic 4.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Dualita úloh lineárního programování a analýza citlivosti
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
JUI - 3. přednáška Zpracování seznamů, predikátové a vyhodnocovací funkce RNDr. Jiří Dvořák, CSc.
1 Vnitřní řazení s využitím dynamických struktur Tvorba spojového seznamu je vcelku triviální záležitostí: a)Vytvořím prázdný seznam příkazem LIST:=nil.
PHP Podmíněné příkazy v PHP - 06
Algoritmizace a programování Podprogramy v Delphi - 10
Algebra.
JUI - 1. přednáška Funkcionální programování Úvod do jazyka Lisp RNDr. Jiří Dvořák, CSc.
Fakulta životního prostředí Katedra informatiky a geoinformatiky
Algebraické výrazy: lomené výrazy
Materiály k přednášce Úvod do programování Ondřej Čepek.
Generování mezikódu Jakub Yaghob
Objekty v CLIPSu RNDr. Jiří Dvořák, CSc.
Databáze Jiří Kalousek.
Základní číselné množiny
Algoritmizace a programování Podmíněné a cyklické příkazy- 08
Informatika I 3. přednáška
Jazyk vývojových diagramů
Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
KONCEPTUÁLNÍ MODELOVÁNÍ
Informatika I 2. přednáška
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
JUI - 9. přednáška Ř ez, negace, práce s databází RNDr. Jiří Dvořák, CSc.
Formulace a vlastnosti úloh lineárního programování
Dostupné z Metodického portálu ISSN: , financovaného z ESF a státního rozpočtu ČR. Provozováno Výzkumným ústavem pedagogickým v Praze.
Informatika I 4. přednáška
Počítače a programování 1
JavaScript Podmínky, cykly a pole.
Cvičení.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
JUI - 6. přednáška Úvod do jazyka Prolog, struktura programu, datové objekty, unifikace RNDr. Jiří Dvořák, CSc.
5. Procedury a funkce Procedura je samostatně odladěný algoritmus, v programu může být volána vícekrát. Dvojí terminologie - rozlišujeme procedury a funkce.
Informatika I 7. přednáška RNDr. Jiří Dvořák, CSc.
Informatika I 8. přednáška RNDr. Jiří Dvořák, CSc.
2 Ing. Jan Keprt Centrální správa uživatelů 3 Jak to bylo dosud Bylo třeba nastavení uživatelů provést zvlášť, v každém modulu samostatně. Uživatel si.
Systém CLIPS RNDr. Jiří Dvořák, CSc.
Práce se šablonami v MS Word 2007
Jazyk XML Jazyk pro tvorbu strukturovaných dokumentů Syntaxí velmi podobný HTML Hlavní cíle návrhu: Snadná editace - jazyk je textový Snadné strojové zpracování.
Výroková logika.
JavaScript Funkce.
JUI - 5. přednáška Modifikace struktur, reprezentace atomů, vstup/výstup, ovládání paměti RNDr. Jiří Dvořák, CSc.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Zpracování neurčitosti Fuzzy přístupy RNDr. Jiří Dvořák, CSc.
Databázové systémy SQL Výběr dat.
Simplexová metoda pro známé počáteční řešení úlohy LP
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Jazyky pro umělou inteligenci RNDr. Jiří Dvořák, CSc.
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Soustavy dvou lineárních rovnic se dvěma neznámými
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
Algoritmizace a programování Algoritmy 4 – Vývojové diagramy (cykly)
Algoritmizace a programování Cykly – While 1. Test Příští hodina test na větvení Konstrukce IF..ELSE případně IF..ELIF..ELSE.
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
Inf Cykly ve vývojových diagramech
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Definiční obor a obor hodnot
Vytváření dokumentace algoritmů
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Oblast platnosti identifikátoru (1)
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Sémantika PL1 Interpretace, modely
Predikátová logika.
Definiční obory. Množiny řešení. Intervaly.
Algebraické výrazy: lomené výrazy
Transkript prezentace:

JUI - 2. přednáška Základní funkce, definice funkcí RNDr. Jiří Dvořák, CSc.

2 Speciální funkce QUOTE (quote S-výraz) Funkce quote je speciální identita - vyhodnocovací systém ví, že nemá vyhodnotit její argument, takže jí předá nedotčený S-výraz a ona jej vrátí jako svůj výsledek. Tato identita se může zkráceně zapsat pomocí apostrofu podle následujícího vztahu 'S-výraz  (quote S-výraz).

3 Speciální funkce SETQ (setq proměnná forma) Funkce setq je analogií příkazu přiřazení z imperativních jazyků. Prvý argument funkce setq je proměnná, která se nevyhodnocuje. Druhý argument je forma, která se vyhodnotí a její hodnota se naváže na uvedenou proměnnou. Tato hodnota je také výsledkem aplikace funkce setq. Pomocí setq je možné zajistit vazbu více proměnných. Vyhodnocování a navazování se v tomto případě provádí postupně. Výslednou hodnotou je hodnota poslední formy. (setq prom1 forma1... promN formaN)

4 Primitivní funkce CAR CDR CONS ATOM EQ zjišťování částí S-výrazů konstrukce S-výrazů predikátové funkce

5 Funkce CAR a CDR (car forma) Hodnotou argumentu musí být tečka-dvojice a hodnotou funkce car je pak první prvek této dvojice. Při aplikaci na neprázdný seznam dostaneme první prvek seznamu. CAR … Contents of Address Register (cdr forma) Hodnotou argumentu musí být tečka-dvojice a hodnotou funkce cdr je pak druhý prvek této dvojice. Při aplikaci na neprázdný seznam dostaneme zbytek seznamu. CDR … Contents of Decrement Register Tyto funkce nemají destruktivní charakter - původní S-výraz zůstává zachován. Existují také složené funkce tvaru cxx…xr, kde místo x může být a (zastupuje car) nebo d (zastupuje cdr). Příslušné funkce se aplikují zprava doleva.

6 Funkce CONS (cons forma1 forma2) Hodnotami argumentů mohou být libovolné S-výrazy. Hodnotou funkce cons je tečka-dvojice vytvořená z prvého a druhého S- výrazu. Provedení funkce cons znamená vytvoření nové cons-buňky, obsahující ukazatele na buňky reprezentující uvedené S-výrazy.

7 Funkce ATOM a EQ (atom forma) Hodnotou argumentu může být libovolný S-výraz. Funkce atom testuje, zda tato hodnota je atom, t.j. číslo nebo symbol, a v tom případě má hodnotu T. V opačném případě má tato funkce hodnotu nil. (eq forma1 forma2) Hodnotami argumentů musejí být atomy. Funkce eq testuje, zda tyto hodnoty jsou shodné atomy a v tom případě nabývá hodnotu T. Pokud hodnotami argumentů jsou různé atomy, je výsledkem nil.

8 Speciální funkce COND (cond (test1... výsledek1) (test2... výsledek2)... (testN... výsledekN)) Tato funkce zajišťuje větvení výpočtu, tedy výběr z několika alternativ v závislosti na splnění zadaných podmínek. Každá alternativa je vyjádřena seznamem forem, kterému říkáme klauzule.

9 Vyhodnocení formy COND Speciální forma cond se vyhodnocuje tak, že se postupně vyhodnocují testy na začátku klauzulí, až se nalezne první s hodnotou různou od nil. Pro tuto klauzuli se vyhodnotí i ostatní výrazy v ní obsažené a hodnota posledního z nich je výsledkem celé formy cond. Pokud se při vyhodnocení nenalezla žádná úspěšná klauzule, je výsledná hodnota nil. Speciálním případem klauzule může být i seznam obsahující pouze jediný výraz - tento výraz pak slouží současně jako podmínka i jako výsledek.

10 Aritmetické a relační operace Aritmetické operace: +, –, *, / Relační operace: =,, =, /= (nerovno) Výrazy s těmito operacemi je třeba zapisovat v prefixovém tvaru.

11 Speciální funkce DEFUN (defun jméno-funkce (par1 par2... parN) výraz1 výraz2... výrazM ) Speciální funkce defun zajišťuje definování nových funkcí. Při aplikaci takto definované funkce se nejprve vyhodnotí argumenty a jejich hodnoty se naváží na proměnné uvedené v h1avičce. Potom se postupně vyhodnocují výrazy uvedené v těle funkce a hodnota posledního z nich je výsledkem aplikace. Po skončení aktivace funkce se zruší lokálně platné vazby argumentů a obnoví se platnost vazeb z (dynamicky) nadřazeného prostředí.

12 Volné a vázané proměnné Při definici funkce nemusí výrazy v těle funkce obsahovat jen proměnné reprezentující argumenty (tzv. vázané proměnné, v terminologii imperativního programování jsou to formální parametry funkce). Takové proměnné, použité v těle funkce, které nejsou vázané, mohou zajišťovat závislost funkce na globálně nastavených hodnotách, a jsou vlastně vedle argumentů dalším nástrojem komunikace funkce s jejím okolím. Tyto proměnné nazýváme volnými proměnnými dané funkce (v terminologii imperativního programování to jsou nelokální proměnné). Toto rozlišení se v Lispu netýká jen argumentů při definici funkcí pomocí defun, ale také všech dalších lispovských konstrukcí, které zavádějí proměnné s lokálně vymezeným rozsahem platnosti (např. speciální funkce let).

13 Určení vazby volné proměnné Statické určení: Funkce si při své aktivaci přináší vazbu volné proměnné z globálního prostředí. Dynamické určení: Vazba volné proměnné se zjišťuje až v místě volání podle nejblíže nadřazeného prostředí, které tuto volnou proměnnou váže. Pro Lisp je typické dynamické určení rozsahu, avšak některé varianty Lispu (např. jazyk Scheme) používají statické určení rozsahu, neboť to umožňuje efektivnější kompilaci funkcí. Používání volných proměnných nevytváří předpoklady pro srozumitelnou a modulární strukturu programů.

14 Programování rekurzivních funkcí Pro číselný argument testujeme rovnost nule nebo jedné, případně i zápornou hodnotu argumentu; do rekurzivní větve dáváme zmenšenou hodnotu argumentu (typicky o hodnotu jedna), obecně hodnotu bližší triviální alternativě. Pro seznam zpracovávaný jen v nejvyšší úrovni testujeme zda seznam je prázdný a argument redukujeme na cdr, případně i více. Pro obecně strukturovaný S-výraz testujeme většinou jako zvláštní případy prázdný seznam a atom (v tomto pořadí) a argument redukujeme na car i cdr.

15 Rozšíření možností definice funkcí Volitelné parametry (defun jm-fce (p1 … &optional o1 …) výraz1 …) Pokud při volání funkce není pro volitelný parametr zadán argument, naváže se na něj hodnota nil. Chceme-li, aby se na parametr oi navázala implicitní hodnota daná výrazem výri, musíme v definici funkce zadat takto (oi výri). Proměnný počet argumentů (defun jm-fce (p1 … pN &rest r) výraz1 …) Při volání funkce je nutno zadat alespoň N argumentů. Hodnoty prvých N argumentů se navážou na parametry p1, …, pN. Z hodnot zbývajících argumentů se vytvoří seznam, který se naváže na parametr r. Je-li zadáno právě N argumentů, naváže se na parametr r hodnota nil.

16 Rozšíření možností definice funkcí Parametry označené klíčovými slovy (defun jm-fce (p1 … &key ks1 …) výraz1 …) Pokud při volání funkce chceme zadat argument odpovídající parametru ksi, musíme napsat :ksi argument. Není li pro některý z parametrů ksi žádný argument zadán, naváže se na něj hodnota nil. Chceme-li, aby se na parametr ksi navázala implicitní hodnota daná výrazem výri, musíme v definici funkce napsat (ksi výri). Pomocné proměnné (defun jm-fce (p1 … &aux (a1 výr1) …) výraz1 …) Pomocné proměnné představují lokální proměnné, na které se při volání funkce navazují hodnoty zadané výrazy výr1, ….