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 programovania
- základné princípy funkcionálneho a logického programovania
- programovací jazyk Common lisp - úvod
- údajové typy v lispe, zoznam, zápis zoznamu ako bodka-dvojice
- elementárne operácie so zoznamom –
CONS , NIL , NULL , FIRST , REST
- ďalšie konštruktory zoznamu –
APPEND , LIST , POSTFIX
- funkcie
CAR a CDR
- zisťovanie typu s-výrazu
ATOM , SYMBOLP , NUMBERP , LISTP
- zápis zoznamu ako bodka-dvojice
- zápis výrazov, forma
- úlohy:
- preštudovať webovú stránku k predmetu FLP
- prečí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ýraz
- priradenie funkčnej väzby symbolu (funkcia
DEFUN )
- typová špecifikácia funkcie
- vyhodnotenie výrazu v lispe
- funkcia
QUOTE
- tabuľka symbolov
- vyhodnocovanie podľa potreby a úplné vyhodnocovanie v interpretoch lispu
- ďalšie funkcie
- vetvenie - forma
COND
- logické funkcie
AND , OR , NOT
- porovnávanie s-výrazov
EQ ,= , EQUAL
- práca s prostredím Lispworks
- úlohy:
- prečítať učebnicu koľko sa dá, ideálne čo najviac z kapitoly Základné prvky jazyka lisp
- nainš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 funkcie
- vlastnosti čistých výrazov
- definícia funkcie
- funkcionálny program, interpret funckionálneho programu
- prečo funkcionálne programovanie?
- opakovanie - bodka-dvojice
- zopakovanie 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 zoznamu
- priradenie hodnoty symbolu -
SET a SETQ
- ú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émantika
- operácie s údajovým typom lisp-zoznam
- ošetrovanie nedefinovaných vstupov pri aplikácii funkcie
- vstavaná funkcia
EVAL
- rekurzia
- základné princípy
- sché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 podmienkami
- príklady na úlohy typu redukcia - na hlavnej úrovni v zozname, na ľubovoľnej úrovni v zozname
- redukcia na hodnotu
- redukcia na počet prvkov s danou vlastnosťou
- redukcia 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ím
- tvorba funkcií s rekurziou na chvoste - technika pomocných parametrov
- prí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ím
- klasifikácia programových schém spracovania zoznamu
- spracovanie nelineárneho zoznamu (vychádza sa z reprezentácie zoznamu binárnym stromom)
- príklady
- diskusia v súvislosti s podmienkami ukončenia pri spracovaní nelineárneho zoznamu
- programové schémy ako zovšeobecnenie riešenia triedy úloh, funkcionál
- funkcionály, príklad
MAP-MY
- použitie funkcionálu, forma
FUNCTION
- vstavané funkcionály v Common Lispe pre aplikovanie funkcií:
FUNCALL , APPLY
- lambda výraz a použitie nepomenovanej funkcie vo funkcionáloch
- vstavané funkcionály v Common Lispe pre prácu so zoznamami:
MAPCAR , REMOVE-IF , REMOVE-IF-NOT , FIND-IF , COUNT-IF , REDUCE a ich typové špecifikácie
LAMBDA vý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
- klasifikácia štrukturálnych schém rekurzívnej funckie
- riadiace štruktúry v lispe
- vetvenie (
COND )
- sekvencia (
DEFUN , PROG )
- cyklus (rekurzia,
PROG )
- funkcionály
- eš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ť
ÚVOD PYTHON P04b
- prečo práve Python ak to nie je funkcionálny jazyk
- základné operácie v jazyku Python
- vykonávanie príkazov v interaktívnej konzole
- základné typy a operácie s nimi
- riadiace štruktúry v Pythone
- definícia funkcie
- úlohy:
- dočítať učebnicu - časť funkcionálne programovanie
- precvičovať rekurzívne funkcie spracovania zoznamov v lispe
- vyskúš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ý typ
- Prečo môže byť používanie premenlivých dýtových typov nebezpečné
- Knižnica
Pyrsistent
- Funkcie vyššej úrovne
- Funkcie
map , filter a reduce
- Balíček
operator
- Lambda funkcia
- Spracovanie zoznamu
- Výpočtový rámec
MapReduce
- Vý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 Pythone
- rieš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átor
- Ako vytvoriť a používať generátor
- Ako sa dá pomocou generátoru vytvoriť nekonečná dátová štruktúra
- Generátor môže šetriť pamäť a čas
- Lenivé vyhodnocovanie
- Vyhodnocovanie len tých častí programu, ktoré treba, v čase keď ich treba
- Použ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 premennej
- Vnorená funkcia
- Uzáver
- Obmedzovanie priestoru mien pomocou uzáveru
nonlocal premenné
- Na čo sa dá použiť uzáver
- Dekorátor
- Obaľovanie funkcií
- Rôzne formy dekorátorov
- Na č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
partial a pomocou uzáveru
- Prí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 programovanie
- výroková logika, predikátová logika
- prologovský program, logický program
- Hornova klauzula: fakt, pravidlo, dopyt
- deklaratí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 programu
- dopyt, cieľ, hypotéza - výpočet pri vykonávaní logického programu
- deklaratí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úra
- predikáty na zisťovanie typov termov
- zisťovanie podobnosti termov
- príklad rodinnej databázy - rodinné vzťahy, predikáty
rodic/2 , dieta/2 , otec/2 , je_otec/1 , muz/1 , zena/1 , sestra/2
- odvodzovanie v prologu, rekurzívne predikáty -
potomok/2
- spätný chod (predikát
potomok/2 )
- poradie klauzúl v programe - príklad
potomok/2
- voľba predikátových symbolov v prologovskom programe
- práca s prologom - SWI prolog
- zoznam 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/2
- príklad
je_zoznam/1
- predikát
member/2
- predikát
append/3 , použitie append/3 na 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šeobecne
- predikáty na spracovanie zoznamov
- filter, vzťah medzi zoznamami, kde jeden obsahuje všetky prvky druhého okrem prvokov s danou vlastnosťou
del/3
- sché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_digits
- zobrazenie: rôzne modifikácie predikátu
plusn , použitie a spätný chod
- poč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
is
- sché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/2 s 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át member/2 , definovanie member/2 deklaratívnym spôsobom pomocou spoj/3
- pri "hraní sa" odporúčam použiť GUI tracer v SWI prologu (predikáty
gtrace/0 a gspy/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 chvoste
- riadiace prostriedky jazyka prolog
- zabránenie spätného chodu použitím podmienok
- predikát rez
- použitie rezu pri spracovaní zoznamov (
suma_vecsie , druha_mocnina )
- kombinácia predikátu rez a
fail
- sché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/3
- cyklus - rekurzia a iterácia, predikát
vypis-zoz/1 iteratívne
- programovanie cyklu pomocou opakovane splniteľných predikátov, predikát
repeat/0 , fail0/ , true/0
- usporiadanie 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/1
- načítavanie údajov od používateľa spojené s kontrolou zadaných údajov
- definovanie 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 |
|
|
|
|