| Obsah prednášok Funkcionálne a logické programovanie 2017/18 Pozvané prezentácie 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 1c lisp - 13.2. 2018  C01 
organizácia predmetu a cvičeníúvod 
  
  paradigmy programovaniazákladné princípy funkcionálneho a logického programovaniaprogramovací jazyk Common lisp - úvod
  
  údajové typy v lispe, zoznam, zápis zoznamu ako bodka-dvojiceelementárne operácie so zoznamom – CONS,NIL,NULL,FIRST,RESTďalšie konštruktory zoznamu –  APPEND,LIST,POSTFIXfunkcie CARaCDRzisťovanie typu s-výrazu ATOM,SYMBOLP,NUMBERP,LISTPzápis zoznamu ako bodka-dvojicezápis výrazov, formaúlohy:
preštudovať webovú stránku k predmetu FLPprečítať učebnicu po s.24 - Úvod a Kapitola 1 Výrazy a funkcie 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 Tutorial lisp - 14.2. 2018  T01 
 definovanie funkcie
  
  lambda výrazpriradenie funkčnej väzby symbolu (funkcia DEFUN)typová špecifikácia funkcievyhodnotenie výrazu v lispefunkcia QUOTEtabuľka symbolovvyhodnocovanie podľa potreby a úplné vyhodnocovanie v interpretoch lispuďalšie funkcie 
  
  vetvenie - forma CONDlogické funkcie AND,OR,NOTporovnávanie s-výrazov EQ,=,EQUALpráca s prostredím Lispworksúlohy:
prečítať učebnicu koľko sa dá, ideálne čo najviac z kapitoly Základné prvky jazyka lispnainštalovať lisp a začať sa s ním hrať 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 1p lisp - 20.2. 2018  P01 
funkcionálne programovanie 
  
  výrazy a funkcievlastnosti čistých výrazovdefinícia funkciefunkcionálny program, interpret funckionálneho programuprečo funkcionálne programovanie?
  opakovanie - bodka-dvojicezopakovanie konštruktorov zoznamu (CONS,LIST,APPEND), signatúry funkciíriadiace štruktúry v lispe
   
   vetvenie (COND)sekvencia (DEFUN)cyklus (rekurzia)
   rekurzívne definície funkcií - spracovanie zoznamupriradenie hodnoty symbolu - SETaSETQúlohy:
študovať  učebnicu min. po s.83 - Programovacie techniky - rekurzia 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 2p lisp - 27.2. 2018  P02 
 abstraktný typ údajov lisp-zoznam
   
   syntax, sémantikaoperácie s údajovým typom lisp-zoznamošetrovanie nedefinovaných vstupov pri aplikácii funkcievstavaná funkcia EVALrekurzia
   
   základné princípyschémy spracovania zoznamu - základné koncepty (zobrazenie, redukcia, filter, rozšírenie)štrukturálny pohľad na rekurziu - rekurzia na chvoste vs. rekurzia s rozšírením, rekurzia jednoduchá vs. viacnásobná, rekurzia s jednou ukončovacou podmienkou vs. s viacerými ukončovacími podmienkamipríklady na úlohy typu redukcia - na hlavnej úrovni v zozname, na ľubovoľnej úrovni v zozname  
  
  redukcia na hodnoturedukcia na počet prvkov s danou vlastnosťouredukcia na booleovskú hodnotu - predikátúlohy:
študovať učebnicu po s.95 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 3p lisp - 6.3. 2018  P03 
 štrukturálne schémy rekurzie
  
  rekurzia na chvoste a rekurzia s rozšírenímtvorba funkcií s rekurziou na chvoste - technika pomocných parametrovpríklad definície funkcie MY-REVERSE(funkcia vráti zoznam, v ktorom je otočené poradie prvkov vstupného zoznamu) - na chvoste a s rozšírenímklasifikácia programových schém spracovania zoznamu
    
	spracovanie nelineárneho zoznamu (vychádza sa z reprezentácie zoznamu binárnym stromom)príkladydiskusia v súvislosti s podmienkami ukončenia pri spracovaní nelineárneho zoznamuprogramové schémy ako zovšeobecnenie riešenia triedy úloh, funkcionál
  
  funkcionály, príklad MAP-MYpoužitie funkcionálu, forma FUNCTIONvstavané funkcionály v Common Lispe pre aplikovanie funkcií: FUNCALL,APPLYlambda výraz a použitie nepomenovanej funkcie vo funkcionálochvstavané funkcionály v Common Lispe pre prácu so zoznamami: MAPCAR,REMOVE-IF,REMOVE-IF-NOT,FIND-IF,COUNT-IF,REDUCEa ich typové špecifikácieLAMBDAvýraz pri použití funkcionálovúlohy:
 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 4p lisp, python - 13.3. 2018 DOKONČENIE LISP  P04a 
ÚVOD PYTHONklasifikácia štrukturálnych schém rekurzívnej funckieriadiace štruktúry v lispe
   
   vetvenie (COND)sekvencia (DEFUN,PROG)cyklus (rekurzia, PROG)funkcionályešte raz priradenia
   
   priradenie hodnoty symbolu (funkcie SET,SETQ,SETF)priradenie funkčnej väzby symbolu (funkcia DEFUN)práca so vstupmi a výstupmi v Lispe (OPEN,CLOSE,READ,PRINT) - treba naštudovať  P04b 
prečo práve Python ak to nie je funkcionálny jazykzákladné operácie v jazyku Python
  
  vykonávanie príkazov v interaktívnej konzolezákladné typy a operácie s nimiriadiace štruktúry v Pythonedefinícia funkcie 
úlohy:
dočítať učebnicu - časť funkcionálne programovanieprecvičovať rekurzívne funkcie spracovania zoznamov v lispevyskúšajte si definíciu funkcie počet atómov v nelineárnom zozname pomocou rekurzie na chvoste 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 5p python - 20.3. 2018 
 P05a a  P05b 
Nemenné dátové typy
	Čo je to nemenný dátový typPrečo môže byť používanie premenlivých dýtových typov nebezpečnéKnižnica Pyrsistent Funkcie vyššej úrovne
  Funkcie map,filterareduceBalíček operatorLambda funkciaSpracovanie zoznamuVýpočtový rámec MapReduceVýpočtový rámec Spark úlohy:
riešiť úlohy na stránke projecteuler.net. Dostupných je tam viac ako 500 celkom zaujímavých úloh, z ktorých veľa sa dá vyriešiť s pomocou funkcionálneho programovania. Riešte čo najviac takých úloh, ktoré viete riešiť pekne funkcionálne (bude pre najôepších aj pekná odmena).  študujte dostupné zdroje k Pythonu, čítajte programy v Pythoneriešiť úlohy na cvičenia Funkcie vyššej úrovne 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 6p - 27.3. 2018 
   P06 
Iterátor a generátor
	Čo je to generátorAko vytvoriť a používať generátorAko sa dá pomocou generátoru vytvoriť nekonečná dátová štruktúraGenerátor môže šetriť pamäť a čas Lenivé vyhodnocovanie
  Vyhodnocovanie len tých častí programu, ktoré treba, v čase keď ich trebaPoužitie generátorov na implementovanie lenivého vyhodnocovania úlohy:
 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 7p - 3.4. 2018 
   P07 
Rozsah platnosti premennejVnorená funkciaUzáver
  Obmedzovanie priestoru mien pomocou uzáverunonlocalpremennéNa čo sa dá použiť uzáver Dekorátor
  Obaľovanie funkciíRôzne formy dekorátorovNa čo je dekorátor dobrý a príklady použitia úlohy:
 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 8p - 4.4. 2018 
   P08 
Čiastočná aplikácia funkcií
  Implementácia pomocou funkcie partiala pomocou uzáveruPríklady použitia Rozpoznávanie vzorov
  Rôzne implementácie v pythone pomocou dekorátorov 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 9p - 10.4. 2018 
   P09 
úvod do logického programovania
   deklaratívne programovanievýroková logika, predikátová logikaprologovský program, logický programHornova klauzula: fakt, pravidlo, dopytdeklaratívne programovanie: predikát minimum/2
 
   %relacia medzi zoznamom (prvy argument) a minimalnym
   %prvkom tohto zoznamu (druhy argument)
   minimum(Zoz, X) :-
       member(X, Zoz),
       not((member(Y, Zoz), X > Y)). odvodzovač, interpret logického programudopyt, cieľ, hypotéza - výpočet pri vykonávaní logického programudeklaratívna a procedurálna sémantika prologu úlohy:
naštudovať časť logické programovanie - kapitola 4 (v učebnici najmä s. 115-141).nainštalovať prolog a začať sa hrať 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 9c - 10.4. 2018 
   C09 
 typy údajov v jazyku prolog, term, konštanta, premenná, anonymná premenná, štruktúrapredikáty na zisťovanie typov termovzisťovanie podobnosti termovpríklad rodinnej databázy - rodinné vzťahy, predikáty rodic/2,dieta/2,otec/2,je_otec/1,muz/1,zena/1,sestra/2odvodzovanie v prologu, rekurzívne predikáty - potomok/2spätný chod (predikát potomok/2)poradie klauzúl v programe - príklad potomok/2voľba predikátových symbolov v prologovskom programepráca s prologom - SWI prologzoznam v prologu, zápis zoznamu, zoznam ako štruktúraúlohy:
naštudovat časť logické programovanie - kapitoly 4, 6.1 až 6.3 a kto zvládne aj kapitola 5 (v učebnici najmä s. 115-141 a kto zvládne aj 159-176, 143-157).nainštalovať SWI prolog a začať sa hrať 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 10p - 17.4. 2018 
   P10 
 predikáty na porovnávanie termov
 
 identita, podobnosťoperátory is,=:=,=\=,==,\==,=,\=zoznam v prologu, príklady testu vlastností zoznamu
 
 podobnosť zoznamov, príklad dve_cisla/1,druhy_prvok/2príklad je_zoznam/1predikát member/2predikát append/3, použitieappend/3na definovanie iných predikátov (postfix/3,posledny/2,okrem_posledneho/2)použitie argumentov ako vstupných aj ako výstupných (predikát member/2.append/3)schémy spracovania zoznamu - všeobecnepredikáty na spracovanie zoznamov
  
  filter, vzťah medzi zoznamami, kde jeden obsahuje všetky prvky druhého okrem prvokov s danou vlastnosťou del/3schéma plati-pre-jeden(predikát, ktorý sa splní, ak zadaný zoznam obsahuje nejaký prvok s danou vlastnosťou)schéma neplati-pre-ziadny(predikát, ktorý sa splní, ak zadaný zoznam neobsahuje žiadny prvok s danou vlastnosťou)schéma filter(predikát, ktorý sa splní, ak zoznam obsahuje iba niektoré prvky zo zoznamu, ktorý je vstupným argumentom)schéma plati-pre-vsetky(predikát, ktorý sa splní, ak zadaný zoznam obsahuje iba prvky s danou vlastnosťou)
    test: all_digitszobrazenie: rôzne modifikácie predikátu plusn, použitie a spätný chodpočet prvkov (s danou vlastnosťou) (pocet, rôzne modifikácie predikátu)súčet prvkov (s danou vlastnosťou) (sucet, rôzne modifikácie predikátu)zabránenie spätného chodu použitím podmienokúlohy:
študovať učebnicu po s. 157 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 11p - 24.4. 2018 
   P11 
aritmetika v prologu, predikát isschéma hladaj(predikát, ktorý sa splní, ak zadaný zoznam obsahuje prvok s danou vlastnosťou alebo vzťah medzi termom a zoznamom, splní sa vtedy, ak sa term nachádza v zozname a zároveň spĺňa zadané ohraničenia)
hľadanie prvkov s určitou vlastnosťou (cislo/1,nested_list/1)zobrazenie zoznamov (inkrement/2)redukcia (sum/2)spracovanie zoznamu na ľubovoľnej úrovni (member_h/2,sum_h/2)úlohy:
prečítať kap. 4 (ak ste tak ešte neurobili)študovať z kap. 6 (s. 159-168)vyskúšať použitie predikátu potomok/2s rôznym poradím klauzúl a podmienok v klauzule s rekurzívnym volaním (4 možnosti)preštudovat predikát append/3: definícia, použitie viacerými spôsobmi,
predikátmember/2, definovaniemember/2deklaratívnym spôsobom pomocouspoj/3pri "hraní sa" odporúčam použiť GUI tracer v SWI prologu (predikáty gtrace/0agspy/1) - info k tomu nájdete v manuáli SWI prologu. 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 12p - 25.4. 2018 
   P12 
 predikát, ktorý definuje vzťah medzi zoznamom a číslom vyjadrujúcim počet jeho prvkov - length/2, rekurzia s rozšírením, rekurzia na chvosteriadiace prostriedky jazyka prolog
zabránenie spätného chodu použitím podmienokpredikát rez
  
  použitie rezu pri spracovaní zoznamov (suma_vecsie,druha_mocnina)kombinácia predikátu rez a failschéma pre predikát ziadny(splní sa, ak v zozname neexistuje prvok s danou vlastnosťou)hľadanie alternatívnych riešení v prologu, spätný chod - príklad sum/3cyklus - rekurzia a iterácia, predikát vypis-zoz/1iteratívneprogramovanie cyklu pomocou opakovane splniteľných predikátov, predikát repeat/0,fail0/,true/0usporiadanie klauzúl v programe a podcieľov v tele pravidla (ilustrácia dôležitosti poradia klauzál v programe na príklade "Opica a banán")negácia v prologu, porovnanie s negáciou v logike (predikát neparny/1)použitie cieľa ako argumentu predikátu - metapredikát call/1načítavanie údajov od používateľa spojené s kontrolou zadaných údajovdefinovanie operátorov v prologu
  
  deklarácia operátora: meno, typ, priorita, asociatívnosťpoužitie operátorovúlohy:
študovať kapitolu 6, zamerať sa najmä na schémy spracovania zoznamu |  | 
 13p - 2.5. 2018  P13 
|  | to Homepage |  | to Teaching |  | to FLP |  | to the Top | 
 |  |  |  |