ϵ">]>
5. CVIČENIE Z PREDMETU ÚVOD DO DEKLARATÍVNEHO PROGRAMOVANIA LS 2013/2014
ČASŤ C
http://dai.fmph.uniba.sk/courses/udp/ex/ex05.zip
Dátum: 18. a 19. 3. 2014
Odporúčaná verzia CL: 5.81.20
WWW stránka predmetu: http://dai.fmph.uniba.sk/courses/udp/
Kontakt: udp(zavináč)lists.dai.fmph.uniba.sk
Úvodná poznámka. Toto cvičenie je venované funkciám operujúcim na zoznamoch (ex05a), chvostovej rekurzii na zoznamoch (ex05b) a tuplingu zoznamových operácií (ex05c).
Literatúra.
[1] J. Kľuka. Prednášky z Úvodu do deklaratívneho programovania LS 2013/2014.
http://dai.fmph.uniba.sk/courses/udp/udp-prednasky-2014.pdf
[2] D. Guller. Poznámky k prednáškam z CL.
[3] J. Komara and P. J. Voda. Metamathematics of Computer Programming. 2001.
Tupling je technika, pri ktorej funkcia vráti -ticu (po anglicky -tuple) výsledkov. Takáto funkcia spravidla vzniká spojením niekoľkých funkcií, ktoré majú rovnaké argumenty, používajú rovnaký typ rekurzie a ich výsledky sú potrebné súčasne. [1, IV. prednáška, §9.2.3]
-tice vytvárame pomocou párovania. Pretože vieme, že funkcia vždy vráti hodnôt, nemusíme vytvárať zoznam (napr. ), stačí hodnoty jednoducho pospájať párovaním ().
Ak hodnotou funkcie je -tica, k zložkám tejto -tice pristupujeme využitím párovej diskriminácie nasledovne:
Úloha. Zadefinujte funkciu , ktorá rozdelí zoznam na dvojicu zoznamov . Zoznam obsahuje prvých prvkov zoznamu , zoznam obsahuje zvyšné prvky .
Napr.
Špecifikácia:
Využite tupling. Funkciu si môžete predstaviť ako tuplingové spojenie funkcií a z ex05a, podobne ako bola funkcia z cvičenia ex04b spojením funkcií a z ex02b. Chceme, aby platilo:
Testovanie.
Split_test = r:Results
Úloha. Zadefinujte funkciu , ktorá rozdelí zoznam na dvojicu zoznamov . Zoznam obsahuje párne prvky zoznamu , zoznam obsahuje nepárne prvky .
Napr.
Využite techniky z predchádzajúcich úloh, nepoužite pomocné funkcie. Funkciu si môžete predstaviť ako tuplingové spojenie funkcie z ex05a a analogickej funkcie .
Testovanie.
Even_odd_test = r:Results
Úloha. Zadefinujte funkciu , ktorá rozdelí zoznam dvojíc na dvojicu zoznamov . Zoznam obsahuje prvé zložky dvojíc zo zoznamu , zoznam obsahuje druhé zložky dvojíc z .
Napr.
Funkcia je inverzná k funkcii z ex05a. Chceme, aby platilo
Testovanie.
Unzip_test = r:Results
Prémiová domáca úloha du05. (1 + 1 + 2 + 1 bod)
Pravidlá pre prémiové domáce úlohy nájdete na http://dai.fmph.uniba.sk/courses/udp/#pdu
Časti a) – c) sa nachádzajú v ex05a.
d) (1 bod) Naprogramujte funkciu , ktorej hodnotou je trojica zoznamov . Zoznamy , a obsahujú prvky zoznamu , ktoré po delení číslom majú zvyšok , respektíve v uvedenom poradí:
Zachovajte poradie prvkov zo zoznamu vo výstupných zoznamoch.
Napríklad .
Testovanie.
Split3_test = r:Results