ϵ">]>
2. CVIČENIE Z PREDMETU ÚVOD DO DEKLARATÍVNEHO PROGRAMOVANIA LS 2014/2015
ČASŤ A
http://dai.fmph.uniba.sk/courses/udp/ex/ex02.zip
Dátum: 4. 3. 2015
Odporúčaná verzia CL: 5.81.21
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é definíciám funkcií primitívnou rekurziou (ex02a) a všeobecnou rekurziou (ex02b).
Literatúra.
[1] J. Kľuka. Prednášky z Úvodu do deklaratívneho programovania LS 2014/2015.
http://dai.fmph.uniba.sk/courses/udp/udp-prednasky-2015.pdf
[2] D. Guller. Poznámky k prednáškam z CL.
[3] J. Komara and P. J. Voda. Metamathematics of Computer Programming. 2001.
Príklad. Sumácia. Nasledujúci komponent obsahuje definíciu sumačnej funkcie primitívnou rekurziou.
Úloha. Faktoriál. Zadefinujte primitívnou rekurziou funkciu faktoriál .
[CL] Návod. Definíciu vpíšte do nasledujúceho pripraveného komponentu, nevkladajte vlastný.
[CL] Návod. Po zmene definície funkcie :
kliknite tlačidlo [Recompile] v pravom hornom rohu (alebo stlačte Alt + R);
uložte svoje riešenie kliknutím [Save] vpravo hore alebo stlačením Alt + S;
otestujte svoju definíciu dopytom:
Fact_test = r:Results
Úloha. Násobenie. Predpokladajte, že máte k dispozícii iba zabudované sčítanie , odčítanie a diskriminácie. Zadefinujte primitívnou rekurziou funkciu násobenia .
[CL] Návod. Po zmene definície funkcie :
kliknite tlačidlo [Recompile] v pravom hornom rohu (alebo stlačte Alt + R);
uložte svoje riešenie kliknutím [Save] vpravo hore alebo stlačením Alt + S;
otestujte svoju definíciu dopytom:
Mul_test = r:Results
Úloha. Umocňovanie. Zadefinujte primitívnou rekurziou funkciu umocnenia .
Špecifikácia:
(Exp_zero) |
(Exp_one) |
(Exp_add) |
Návod. Použite zabudované násobenie (operátor *). Pri výbere diskriminácie sa nenechajte ovplyvniť špecifikáciou, použite rovnakú diskrimináciu ako doteraz.
[CL] Návod. Po zmene definície :
kliknite tlačidlo [Recompile] v pravom hornom rohu (alebo stlačte Alt + R);
uložte svoje riešenie kliknutím [Save] vpravo hore alebo stlačením Alt + S;
otestujte svoju definíciu dopytom:
Exp_test = r:Results
Úloha. (Z časových dôvodov riešte na cvičeniach až po vyriešení úloh z ex02b.)
Zadefinujte funkciu , ktorej hodnotou je buď
prirodzené číslo , ktoré je druhou odmocninou , alebo
, ak také neexistuje.
Špecifikácia:
Návod. Použite pomocnú funkciu definovanú primitívnou rekurziou. Na efektívnosti nezáleží. Podobná úloha sa objavila na prednáške pre delenie.
[CL] Pomocnú funkciu musíte vložiť pred komponent s funkciou .
Prémiová domáca úloha du02. Pravidlá pre prémiové domáce úlohy nájdete na http://dai.fmph.uniba.sk/courses/udp#pdu.
a) (2 body) Dokážte, že pre Vašu definíciu funkcie platí vyššie uvedená vlastnosť (Exp_add).
Využite iba matematickú indukciu, svoju definíciu funkcie a všeobecne známe vlastnosti sčítania a násobenia (asociatívnosť, komutatívnosť, distributívnosť, krátenie) a vlastnosti modifikovaného odčítania (podľa 1. prednášky [1]). Nesmiete však použiť vlastnosti umocnenia.
Časti b) a c) sa nachádzajú v module .