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

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

1. Od Scheme k Lispu

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

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Programovací jazyk Pascal

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

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

Excel - databáze. Opakování. Soubor, který jsme upravovali. Upravený soubor. Hrubá mzda = počet kusů * Kč za kus B6=B4*B5

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Vytvoření tiskové sestavy kalibrace

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Postupy práce se šablonami IS MPP

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

František Hudek. duben ročník

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

Cvičení 2. Přesměrování vstupu a výstupu. Posloupnost příkazů. Příkazy pro informaci o uživatelích

Programování v jazyce JavaScript

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

Algoritmizace a programování

Vzorce. StatSoft. Vzorce. Kde všude se dá zadat vzorec

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Funkcionální programování úvod

KAPITOLA 4 ZPRACOVÁNÍ TEXTU

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

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]

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

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Sada 1 - PHP. 03. Proměnné, konstanty

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

DUM 06 téma: Tvorba makra pomocí VBA

Microsoft Office PowerPoint 2003

Paradigmata programování 1

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

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

PROGRAMOVÁNÍ V SHELLU

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Práce s programem MPVaK

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

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

K 2 - Základy zpracování textu

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Č í sla slovy 1.3. verze dokumentu: vytvořil: Ing. Pavel Randák předmět: Uživatelský manuál vydavatel: Austro-Bohemia, s.r.o.

Tabulkový procesor. Základní rysy

PSK3-9. Základy skriptování. Hlavička

První kapitola úvod do problematiky

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

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

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Funkce, podmíněný příkaz if-else, příkaz cyklu for

MS Excel makra a VBA

Práce se styly 1. Styl

IMPORT DAT DO DATABÁZE

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná.

KAPITOLA 8 TABULKOVÝ PROCESOR

10 Algoritmizace Příklad 2 Word 2007/ VBA

V ukázce jsou zalomení řádku signalizována znakem a konce odstavců znakem. Nástroje Vkládání odrážek a číslování v nabídce DOMŮ v sekci ODSTAVEC.

ZÁKLADY POŘIZOVÁNÍ TEXTU

LISP Definice funkcí

Paradigmata programování 1

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

MS Word. verze Přehled programů pro úpravu textu

Základní nastavení textového editoru Word 8.0 (Microsoft Office 97)

Paměť počítače. alg2 1

Paradigmata programování 2

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Místo úvodu. Čeho se vyvarovat. Mazání znaků

LEKCE 6. Operátory. V této lekci najdete:

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

První kroky s METEL IEC IDE

Gabriela Janská. Středočeský vzdělávací institut akademie J. A. Komenského

Software602 Form Designer

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Kurikulum počítačové gramotnosti pro žáky se speciálními vzdělávacími potřebami příloha ŠVP ( 2.stupeň ZŠ - 3.část )

Lokální definice (1) plocha-kruhu

MS Excel Základy maker. Operační program Vzdělávání pro konkurenceschopnost. Projekt Zvyšování IT gramotnosti zaměstnanců vybraných fakult MU

Začínáme pracovat s tabulkovým procesorem MS Excel

Manuál k programu KaraokeEditor

Algoritmizace a programování

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

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


Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Zápis programu v jazyce C#

Formátování pomocí stylů

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

6. Příkazy a řídící struktury v Javě

Základy zpracování kalkulačních tabulek

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

Základní orientace v MS Excel

Úvod do programovacích jazyků (Java)

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

V této aplikaci si ukážeme jakým způsobem zobrazovat čas a datum. Pro ovládání zobrazení času a datumu se naučíme využívat nabídku.

Formát stránky, písma, odstavce Word 2007 egon. Formát stránky a písma, okraje, odstavce, oddíly

KAPITOLA 3 - ZPRACOVÁNÍ TEXTU

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

Otázky neopisuj, piš odpověď!

Transkript:

FUNKCIONÁLNÍ A LOGICKÉ PROGRAMOVÁNÍ 2. CVIČENÍ 2011 Jan Janoušek MI-FLP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Page 1 of 7 MI-FLP cviceni 2 Obsah atomy (čísla, řetězy, symboly), seznamy, pravidla vyhodnocování výrazů, '(quote), list, nil, logické operace, predikáty, listp, if, makra and a or, defun, LispWorks (file/load, tools/editor, file/new), globální proměnné, defparameter, defconstant, lokální proměnné, let, setf. Historická poznámka První implementaci Lispu vyvinul John McCarthy spolu se svými studenty v roce 1958. Po Fortranu je Lisp nejstarším stále používaným jazykem. Ačkoliv byl Lisp původně navržen pouze jako teoretické cvičení, jazyk se stal populární i pro praktické programování - hlavně v oboru umělé inteligence. Lisp je však vhodný i pro běžné aplikace - je v něm napsán například textový editor Emacs. První veřejná verze specifikace Common Lispu byla publikována v roce 1984. S pomocí vývojářů a uživatelů se specifikace postupně vyvíjela, až byla v roce 1994 vydána jako X3.226 ANSI Common Lisp standard. V současnosti existuje několik implementací Common Lispu. Mezi nejznámnější open source patří CMUCL, SBCL a CLISP, z komerčních jsou to LispWorks a Allegro. Na cvičeních budeme pracovat se systémem Xanalys LispWorks. Atomy Poznámka k typografickým konvencím: V následujícím textu budeme střídat běžný text s ukázkami simulujícími průběh sezení s interpretem Lispu. Pro odlišení jednotlivých typů textu budeme používat následující pravidla: běžný text je zobrazen ve fontu Times New Roman, v případě potřeby je zobrazen tučně, kurzívou nebo i tučnou kurzívou; pokud jsou zde ucelené Lispovské výrazy, zobrazí se ve fontu Courier New, jména Lispovských proměnných, funkcí apod. se zobrazí ve fontu Courier New tučně, pokud ukazujeme strukturu argumentů při zavádění nějaké nové Lispovské funkce, zobrazíme je ve fontu Courier New kurzívou sezení s interpretem je zobrazeno ve fontu Courier New tak, že prompt a výsledek vyhodnocení se zobrazí tučně, kód zadávaný uživatelem je v základním řezu Lisp se opírá o interpretační způsob výpočtu. Po spuštění LispWorks se otevře okno s názvem Listener, ve kterém je zobrazena výzva promptu (toplevel), kterou se ohlašuje interpret Lispu: CL-USER 1 > Lisp tímto oznamuje, že očekává zadání výrazu k vyhodnocení. Po obdržení takového výrazu se ho snaží vyhodnotit. Vyhodnocení probíhá postupným zjednodušováním (redukcí) původního výrazu na tvar, který již dále nelze zjednodušit, a ten se vrátí jako výsledek. Poté Lisp očekává další výraz. Jestliže během redukce nastala chyba, Lisp ji ohlásí. Základní typy dat, které se zpracovávají jako celek, se nazývají atomy: CL-USER 1 > 1 1 ; výsledkem vyhodnocení čísleného atomu je příslušné číslo

Page 2 of 7 CL-USER 2 > "Hello" "Hello" ;vyhodnocením řetězce získáme tento řetězec CL-USER 3 > 1.2 1.2 ; reálná čísla Mezi atomy patří navíc symboly (symbolické atomy). Jestliže zadáme symbol k vyhodnocení, chápe se jako označení proměnné a interpret Lispu se snaží vrátit hodnotu asociovanou s tímto symbolem: CL-USER 4 > x Error: The variable X is unbound. 1 (continue) Try evaluating X again. 2 Return the value of :X instead. 3 Specify a value to use this time instead of evaluating X. 4 Specify a value to set X to. 5 (abort) Return to level 0. 6 Return to top loop level 0. Type :b for backtrace, :c <option number> to proceed, or :? for other options CL-USER 5 : 1 > Došlo k chybě - na symbol X není vázána žádná hodnota. Po každé chybě se spustí varianta toplevel nazývaná break loop. Zde je možno odladit vzniklou chybu. Pomocí CL-USER 13 : 1 > :c 6 CL-USER 14 > se navrátíme zpět. Seznamy Program, který má něco dělat, se ovšem nemůže skládat pouze z atomů. Vyvolání funkce zapíšeme v Lispu ve formě seznamu. CL-USER 14 > (+ 1 2) 3 První prvek seznamu zadaného k vyhodnocení se chápe jako funkce (operátor), ostatní jako její argumenty. Protože je použita prefixová notace, není problém zadat funkci více argumentů (pokud to její sémantika připouští). CL-USER 17 > (+ 1 2 3 4 5) 15 Jestliže chceme zadat složitější výraz, použijeme opět prefixovou notaci. Například (1 + 3 + 4)/(1 + 3) přepíšeme jako: CL-USER 18 > (/ (+ 1 3 4) (+ 1 3)) 2 Vyhodnocování

Page 3 of 7 Při vyhodnocování výrazů postupuje Lisp podle následujících pravidel: 1) atomy se vyhodnocují podle pravidel popsaných výše 2) jestliže je k vyhodnocení zadán seznam, předpokládá se, že se jedná o zápis (vyvolání) funkce, takže jeho první prvek určuje funkci a ostatní prvky jsou její argumenty 3) nejprve se zleva doprava vyhodnotí argumenty podle stejných pravidel 4) po vyhodnocení všech argumentů se na jejich hodnotu aplikuje funkce (zadaná jako první prvek seznamu) 5) po vyhodnocení funkce se vrátí její hodnota V předchozím případě se tedy napřed vyhodnotil výraz (+ 1 3 4) --> 8 (parametry funkce + jsou číselné atomy, takže se vyhodnotily samy na sebe), poté podobně výraz (+ 1 3) --> 4. Hodnoty 8 a 4 byly předány funkci /, která vrátí 2. Aplikace funkce na její parametry (i její definice) je v Lispu zapsaná ve formě seznamu, program je vyjádřen jako aplikace funkce na její parametry: Program v Lispu má tvar seznamu! Od toho pochází název LISP Parentheses :) LISt Processing (ne jak si mnozí myslí od Lost In Stupid Speciální operátory Se symboly a seznamy občas potřebujeme pracovat jinak než podle vyhodnocovacích pravidel popsaných dříve. Lisp proto zavádí některé operátory, které tato pravidla porušují - jedním z nich je quote. Operátor quote očekává jediný argument, se kterým neudělá nic. Vrátí ho tak, jak byl zapsán. CL-USER 19 > (quote (+ 1 2 3)) (+ 1 2 3) Zkratka pro quote je '. Můžeme tedy psát: CL-USER 20 > '(+ 1 2 3) (+ 1 2 3) Data Mimo obvyklé datové typy (čísla, řetězce, hash tabulky, pole,...) poskytuje Lisp ještě další dva méně obvyklé typy - list a symbol. Symboly si prozatím můžeme představit jako proměnné, na které může být vázán nějaký objekt. Při pokusu vyhodnotit symbol se vrací hodnota reprezentující tento navázaný objekt. Jestliže chceme při vyhodnocení získat zpět tentýž symbol, použijeme quote. CL-USER 35 > 'a A Při zadání symbolu je jeho jméno převedeno na velká písmena. Lisp tedy standardně nerozlišuje malá a velká písmena. Toto chování se dá změnit obalením jména symbolu mezi svislé čáry např. Xaver. Pomocí tohoto obalení je možno definovat téměř jakýkoliv název symbolu.

Page 4 of 7 CL-USER 36 > ' ahoj ja +/* jsem symbol ahoj ja +/* jsem symbol Znak není součástí názvu: CL-USER 37 > (symbol-name ' ahoj ja +/* jsem symbol ) "ahoj ja +/* jsem symbol" Seznam je reprezentován jako posloupnost nula nebo více prvků uzavřená v závorkách. Každý z těchto prvků může být opět seznamem a prvky jsou od sebe navzájem odděleny mezerou, kdykoliv je to nutné. CL-USER 43 > (1 2 ok (4 ko)) Error: Syntactic error in form (1 2 OK (4 KO)): Illegal function name 1. 1 (abort) Return to level 0. 2 Return to top loop level 0. Type :b for backtrace, :c <option number> to proceed, or :? for other options Co se stalo? Lisp považoval zadaný seznam za zápis funkce a snažil se jí podle dříve popsaných pravidel vyhodnotit. Funkce "1" však v systému neexistuje a proto interpret ohlásil chybu použijeme quote CL-USER 44 : 1 > :c 2 ; zajistí návrat z break loop CL-USER 45 > '(1 2 ok (4 ko)) (1 2 OK (4 KO)) Jak je vidět, quote ochrání před vyhodnocením celý výraz - včetně podseznamů. Funkce pro vytváření seznamů se jmenuje list.očekává nula nebo více parametrů, které vyhodnotí a z výsledných hodnot vytvoří seznam. CL-USER 51 > (list 'route (+ 33 33) "is" 'highway) (ROUTE 66 "is" HIGHWAY) Nesmíme zapomenout dát znak quote před parametry, které nechceme vyhodnotit. Prázdný seznam můžeme v Lispu reprezentovat jako nil nebo (). Již víme, že program v Lispu má tvar seznamu. Nyní víme, že seznam je jedním ze základních datových typů v Lispu. Lisp umí se seznamy pracovat - vytvářet, rušit, měnit V Lispu můžeme vytvořit program, který vytvoří Lispovský program Logické operace Booleovská hodnota false se v Lispu značí jako nil. Před symbol nil není třeba dávat znak quote, protože se vyhodnotí sám na sebe. CL-USER 55 > nil NIL Standardní vyjádření Booleovské hodnoty true je v Common Lispu t. Stejně jako nil se symbol t vyhodnotí vždy sám na sebe.

Page 5 of 7 Jako příklad funkce, která vrací buď nil nebo t (takové funkce se nazývají predikáty, jejich název často končí na p), poslouží funkce listp. Tato funkce testuje, jestli její parametr je seznam. Podmíněný výraz se v Lispu zapíše jako: (if test then-expr else-expr ) Jestliže má test hodnotu t, vrátí se hodnota then-expr a výraz else-expr se nevyhodnocuje. Jestliže má test hodnotu nil, je postup opačný. Část else-expr je volitelná - jestliže chybí, předpokládá se standardně hodnota nil. Pozornější čtenář si při čtení jistě všiml, že opět došlo k porušení obvyklých pravidel vyhodnocování argumentů - if totiž není běžná funkce, ale speciální operátor. V Common Lispu platí, že vše kromě nil a prázdného seznamu má logickou hodnotu t (dokonce i číslo 0). CL-USER 66 > (if 0 (+ 1 2) 12)) 3 Logické operátory and resp. or provádějí logický součin, resp. logický součet svých argumentů. Oba vyhodnocují argumenty pouze tak dlouho, dokud je to potřeba k určení výsledku. Operátor or postupně vyhodnocuje své argumenty, dokud některý nemá logickou hodnotu t nebo dokud neprojde všechny argumenty. Vrátí hodnotu naposledy vyhodnoceného výrazu. CL-USER 67 > (or nil (+ 1 2) nil) 3 Operátor and pracuje obdobně. Opět tedy dochází k porušení pravidel vyhodnocování argumentů -v tomto případě se však jedná o tzv. makra. Definice funkcí Funkce se v Lispu definují pomocí defun. Očekávány jsou tři nebo více argumentů: jméno funkce, seznam jejích parametrů, tělo funkce. CL-USER 68 > (defun my-adder (x y) (+ x y)) MY-ADDER Vznikla pojmenovaná funkce my-adder, která očekává dva parametry a která jako výsledek vrátí jejich součet. Volat ji můžeme jako standardní lispovskou funkci - tedy zápisem seznamu, jehož první prvek představuje jméno funkce a zbytek jsou parametry. Netřeba poznamenávat, že právě pro takto definované funkce opravdu platí pravidlo o vyhodnocování, které speciální operátory (jako quote a if) nebo makra (jako and a or) porušují. Samozřejmě, defun toto pravidlo rovněž porušuje... CL-USER 69 > (my-adder 10 13) 23 Práce v systému LispWorks

Page 6 of 7 Jestliže máme soubor se zdrojovým kódem Lispu, můžeme ho nahrát pomocí menu file/load nebo přímo v listeneru zadáním funkce load: CL-USER 4 > (load "D:/lisp/2cviko.lisp") ; Loading text file D:\lisp\2cviko.lisp #P"D:/lisp/2cviko.lisp" Po nahrání se listener chová, jako bychom vše, co je v souboru, zadali přímo do něj. Standardně mají LispWorks klávesy namapované podle vzoru editoru emacs. V menu tools/preferences/emulation se nechá nastavit emulace kláves podle windows, a to buď pro aktivní okno nebo pro všechna. Psaní delších částí kódu není v listeneru příliš pohodlné. V menu tools/editor otevřeme okno k editování textu. Odsazování a zvýrazňování syntaxe zapneme: stisknutím alt+x - v dolní části okna se objeví výzva Extended Command: zadáme Lisp mode. Alternativně můžeme otevřít nový soubor v menu file/new, v tomto okně je Lisp mode standardně zapnutý. Při psaní složitějších funkcí je nutno důsledně dodržovat odsazování, aby byl zdrojový text dobře čitelný. Výsledný kód se čte podle odsazení a ne podle dohledávání odpovídajících si závorek. V Lisp mode provádí editor odsazování automaticky vždy po stisku klávesy tab. Nezvyklé odsazování konstrukce if (else část je odsazena méně než then) je možno změnit zadáním (editor:setupindent "if" 3 2 4) do listeneru. Při editaci zůstává text v takzvaném bufferu. Abychom odladili napsaný kód, máme několik možností: 1) definice funkcí po jedné kopírujeme do listeneru a provedeme 2) pravým tlačítkem myši v okně editoru vyvoláme menu, v němž zadáme buffer/evaluate 3) pravým tlačítkem myši v okně editoru při kurzoru uvnitř definice vyvoláme menu, v němž zadáme definitions/evaluate 4) uložíme buffer do souboru, pravým tlačítkem myši v okně editoru vyvoláme menu, v němž zadáme file/load Některé zkratkové klávesy pro práci (mapování kláves podle emacs) : Listener: alt+p -- prohlížení historie zadaných výrazů zajet kurzorem na výraz, který chceme vložit, potom enter kopírování textu viz editor Editor: kopírování textu - označíme začátek textu pomocí ctrl+space, poté nastavíme kurzor na konec textu. ctrl+w text vyjme, alt+w ho pouze kopíruje. vkládání textu se děje pomocí ctrl+y. mazání řádku - ctrl+k (od pozice kurzoru do konce), vymazaný text je možno vložit pomocí ctrl+y. Proměnné

Page 7 of 7 Globálně dostupnou proměnnou lze v Common Lispu vytvořit pomocí: CL-USER 20 > (defparameter *global* 17) *GLOBAL* Tato proměnná je přístupná všude, kromě míst, kde je vytvořena stejně pojmenovaná lokální proměnná. Kvůli zamezení chyb při programování, které by tím mohly být způsobené, bývá zvykem na začátek i konec jména dát znak *. Podobně vytvoříme konstantu: CL-USER 21 > (defconstant glob-const 11) GLOB-CONST Konstanta znaky * nepotřebuje, neboť při pokusu znovu zavést stejně pojmenovanou proměnnou Lisp ohlásí chybu. Lokální proměnné je možné zavádět pomocí operátoru let. CL-USER 19 > (let ((a 10) (y 12)) (- y a) (* a y)) 120 Forma let má dvě části. V první je seznam nových lokálních proměnných pokud chceme některou inicializovat na jinou hodnotu než nil, uvedeme ji ve tvaru (proměnná výraz). Zbývající část představuje vlastní tělo formy let tvořené posloupností výrazů. Tyto výrazy se vyhodnocují zleva doprava a jako výsledek let se použije hodnota posledního z nich. Změnit hodnotu přiřazenou nějaké proměnné je možno pomocí setf. CL-USER 22 > (setf a 12) 12 Jestliže odpovídající globální proměnná a neexistuje, je vytvořena. Ve zdrojových kódech je však programátorsky čistší použít defparameter.

Cvičení 2 file:///c:/pracovni/vyuka/jui/web/w02test.html Page 1 of 1 Cvičení 2 - priklady 1) Popište postup a výsledek vyhodnocení následujících výrazů: a) (/ (+ 8 4) (- 7 1)) b) (list (+ 2 3) t) c) (if (+ 2 3) (+ 4 5) (- 5 3)) d) (and (+ 2 3) (- 5 5) (list 4) (+ 5 6)) 2) Pomocí primitivních operací 1+, 1-, testu na nulu zerop a řídicích konstrukcí cond a if definujte v jazyce Lisp funkce (soucet x y), (rozdil x y), (mensirovno x y) - pro nezáporné celé hodnoty argumentů x a y (využijte definice těchto funkcí zapsané funkcionální notací ve cvičení 1). 3) Definujte funkci max2, která očekává dva parametry a vrátí hodnotu většího z nich. 4) Definujte funkci list3, která očekává 3 parametry a jejím výsledkem je seznam tvořený hodnotami těchto parametrů. V definici smíte použít pouze základní Lispovskou funkci cons. (list3 'a (+ 1 2) 3) --> (A 3 3) 5) Pomocí funkcí definovaných v úloze 2) definujte funkce (soucin x y), (podil x y) a predikat (deli m n) (inspirujte se řešeními ze cvičení 1). 6) Pomocí funkcí (pridejp c r), (deli m n), (podil x y) definujte funkci (binstr n), která převede číslo zadané v argumentu na řetězec vyjadřující zápis tohoto čísla ve dvojkové soustavě (inspirujte se řešeními ze cvičení 1). Funkci (pridejp c r) můžeme v Lispu definovat např. takto: (defun pridejp (c r) (concatenate 'string r (string c)))