Paradigmata programování 2 1. cvičení Radek Janoštík Univerzita Palackého v Olomouci 11.2.2019 Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 1 / 19
Úvod Předmět navazuje na Paradigmata programování 1 Jedna dvouhodina týdně (přednáška, doc. Krupka) + dvě hodiny cvičení (výklad + samostatná práce) Anketa: oblíbenost scheme (Dobrá/špatná) zpráva: Scheme po prvních dvou cvičení neuvidíme Přechod k LISPu Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 2 / 19
Konzultace, kontakt Email: radek.janostik@upol.cz Pracovna: 5.076 Telefon: 585 634 715 (nepreferován) Web: http://apollo.inf.upol.cz/ janostik/ Konzultace: Čtvrtek 13:00-14:30 nebo dohodou Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 3 / 19
Podmínky zápočtu Účast na cvičeních je povinná Minimální účast: 75% Čeká nás 12 cvičení, tedy max. 3 absence Ze závažných důvodů možnost omluvit/uznat účast Vyžadována aktivní účast (neznalost definicí, předchozí látky absence) Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 4 / 19
Úvod do (Common) Lispu Lisp = rodina jazyků Druhý nejstarší vysokoúrovňový jazky CommonLisp - standardizovaný dialekt Starší bratr scheme Opět jednoduchá, závorková syntax Na pár odlišností velmi podobný scheme univerzálnější - multiparadigmový, přívětivější vývojová prostředi,... Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 5 / 19
Vývojová prostředí (1/2) - LispWorks Preferované vývojové prostředí http://www.lispworks.com Ke stažení - Personal Edition - 5hodinový běh Po vyplnění dotazníku Údajně multiplatformní (Windows, MacOS X, Linux (za bludišt áka)) All-in One Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 6 / 19
Vývojová prostředí (2/2) - Alternativy GNU Emacs Powerfull textový editor (až operační systém) Podpora CommonLispu (Slime) Multiplatformní https://www.gnu.org/software/emacs/ Musí se zažít Portacle Založené na Emacs Přednstavené, doplňování, syntex-check,... Multiplatformní https://portacle.github.io/ Vyzkoušejte, mohou být lepší než LispWorks Na cvičení budu používat LispWorks Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 7 / 19
LispWorks (1/5) - představení Klávesové zkratky: Tools Preferences Environment Emulation Emacs-ové klávesové zkratky Windwos-like klávesové zkratky (doporučeno) Listener Klasická příkazová řádka interpretru Podobně jako spodní část v Racketu Slouží k přímému vyhodnocování výrazů Ctr+ArrowUp - poslední příkaz * - poslední výsledek Editor Soubor s kódem = buffer Více záložek (záložka buffers) Záložka Definitions - seznam definicí Důležitá tlačítka: Breakpoint, MakroExpand, CompileBuffer, CompileDefinition, EvalDefinition Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 8 / 19
LispWorks (2/5) - Restarty Dojde-li v Listeneru k chybě, informuje vás o ní Dostanete na výběr více možností :b backtrace :c + číslo vybraná možnost Možnosti (výběr) Znovu vyhodnocení (předtím změna v bufferu) Specifikování vazby Abort... Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 9 / 19
LispWorks (3/5) - Debugger Krokování programu V Editoru Tlačítko toggle breakpoint umístí zarážku Při dosažení breakpointu se objeví stepper Stepper - viz cvičení Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 10 / 19
LispWorks (4/5) - Inspector Klikací prohlížení hodnot Ikona Inspect (Mikroskop se zeleným puntíkem) Textová alternativa: (inspect proměnná) Ukončení :q Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 11 / 19
LispWorks (5/5) - Hyperspec nápověda Help Manuals ANSI CommonLisp standard Kompletní referenční příručka, popis funkcí,... Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 12 / 19
Lisp vs. Scheme (1/2) - Vazby symbolů Symboly v LISPu mají 2 druhy vazeb: Hodnotová vyhodnocuje se pokud není na 1. místě seznamu Funkční vyhodnocuje se na 1. místě seznamu Funkčí vazba se dá zjistit pomocí (function symbol) Zavolání funkce z hodnotové vazby (funcall symbol argumenty) Ukázka Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 13 / 19
Lisp vs. Scheme (2/2) - Pravdivostní hodnoty a prázdný seznam Pro pravdu, #t ze scheme, máme symbol t Pro nepravdu, #f ze scheme, máme symbol nil Narozdíl od scheme t a nil jsou obyčejné symboly Vše kromě nil a prázdného seznamu se bere jako pravda Seznam je ukončený nil Ukázka Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 14 / 19
Lisp vs. Scheme (2/2) - Slovníček Slovníček s překladem známých procedur ze Scheme do LISPu bude zveřejněn na webu Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 15 / 19
Cvičení 1. Příklad Nainstalujte a spust te LispWorks Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 16 / 19
Cvičení 2. Příklad Naprogramujte v LISPu funkci fib pro výpočet n-tého členu Fibbonachiho posloupnosti > (fib 5) 5 > (fib 6) 8 > (fib 10) 55 Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 17 / 19
Cvičení 3. Příklad Naprogramujte v LISPu funkci my-apply se 2 parametry, první má být funkce, druhý hodnota, která vrátí výsledek aplikace funkce na hodnotu > (my-apply (lambda (x) (* x x x)) 5) 125 > (my-apply (function fib) 10) 55 > (my-apply (function sqrt) 25) 5 Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 18 / 19
Cvičení 4. Příklad Naprogramujte v LISPu funkci odd-list se jedním parametrem list, která ze seznamu vytvoří seznam s prvky na lichých pozicích > (odd-list (1 2 3 4 5)) (1 3 5) > (odd-list ()) () > (odd-list (8 2 3 6 8 7 1 2 3 6)) (8 3 8 1 3) Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 19 / 19