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:
    • prečítať učebnicu po s.112 - dokončiť časť funkcionálne programovanie
    • riešiť príklady funkcií v Alefe
    • pozrite si síce starý, ale stále aktuálny a zaujímavý článok Why functional programming matters.

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

  • schémy spracovania zoznamu - príklady
  • konštrukcia a dekompozícia atómov (name/2)
  • konštrukcia a dekompozícia štruktúr (=../2, functor/3)
  • predikátová logika, jazyk predikátovej logiky, logická formula, term, atomická formula, literál, klauzula
  • logický program, Hornova klauzula
  • odvodenie výsledku v prologu, rezolvenčná metóda
    • dôkaz sporom
    • rezolvenčné odvodzovacie pravidlo
    • veta o úplnosti rezolvencie
  • poznámka k zadaniam:
    pokiaľ bude váš program modifikovať databázu prologu (t.j. pridávať a rušiť klauzuly pomocou predikátov asserta, assertz, retract treba na začiatku programu deklarovať, že ide o dynamické predikáty pomocou cieľa dynamic. Napr. na začiatku programu (v tej časti, kde budete aj deklarovať operátory) uvediete:
      :- dynamic pretekar/5.
      :- dynamic data/2.
    
    v prípade, že budete modifikovať klauzulu predikátov pretekar/5 a data/2. Prípadne pozrite help k predikátu dynamic.
  • úlohy:
    • vstupy a výstupy v prologu, predikáty see/1, seen/0, tell/1, told/0
    • práca s databázou v prologu (predikáty assert, retract)
    • schémy spracovania súboru (iterácia, rekurzia)
    • spracovanie termov v databáze prologu
    • doštudovať učebnicu do konca

to Homepage to Teaching to FLP to the Top

Home
Research
Projects
Publications
Books
SCM
Teaching
Links
Last updated:
Mária Bieliková bielik [zavináč] fiit-dot-stuba-dot-sk
Design © 2oo1 KoXo