ϵ">]>
9. CVIČENIE Z PREDMETU ÚVOD DO DEKLARATÍVNEHO PROGRAMOVANIA LS 2012/2013
ČASŤ B
http://dai.fmph.uniba.sk/courses/udp/ex/ex09.zip
Dátum: 8. 4. 2013
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é triedeniu zoznamov (ex09a) a reprezentácii konečných množín usporiadanými zoznamami bez opakovania (ex09b).
Literatúra.
[1] J. Kľuka. Prednášky z Úvodu do deklaratívneho programovania LS 2012/2013.
http://dai.fmph.uniba.sk/courses/udp/udp-prednasky-2013.pdf
[2] D. Guller. Poznámky k prednáškam z CL.
[3] J. Komara and P. J. Voda. Metamathematics of Computer Programming. 2001.
Reprezentácia množín usporiadanými zoznamami bez opakovania. Konečné množiny môžeme jednoducho reprezentovať zoznamami. Pri množinách je dôležitá iba príslušnosť prvku do množiny. Počet výskytov prvku ani poradie prvkov nie sú podstatné. Množiny môžeme preto reprezentovať usporiadanými zoznamami bez opakovania prvkov. Operácie na dvoch množinách potom dokážeme naprogramovať tak, aby počet krokov potrebných na ich vykonanie lineárne závisel od súčtu počtu prvkov v množinách.
[CL] Trichotomická diskriminácia. V nasledujúcich úlohách využijeme trichotomickú diskrimináciu:
Úloha. Zadefinujte predikát , ktorý platí, ak je zoznam, ktorý reprezentuje množinu, teda usporiadaný a bez opakovania.
Definícia je podobná predikátu z ex08a.
Špecifikácia:
Testovanie:
Set_test = r:Results
Úloha. Zadefinujte predikát , ktorý platí, ak je prvkom množiny .
Napríklad a .
Využite (ale netestujte!), že je množina. Ani v jednom z uvedených príkladov výpočet nesmie prejsť celý zoznam .
Špecifikácia:
Testovanie:
Member_test = r:Results
Extenzionalita. Všimnite si, že reprezentácia množín usporiadanými zoznamami bez opakovania je jednoznačná a teda má vlastnosť extenzionality: Množiny sú si rovné práve vtedy, keď majú tie isté prvky.
Úloha. Zadefinujte funkciu , ktorá vloží prvok do množiny , teda vráti množinu, ktorá obsahuje všetky prvky a prvok .
Napríklad a .
Pozor na poradie argumentov a na fakt, že v množinách sa prvky neopakujú a sú usporiadané. Nepoužite žiadne pomocné funkcie ani predikáty (vrátane a ).
Špecifikácia:
Testovanie:
Insert_test = r:Results
Úloha. Zadefinujte funkciu , ktorá odstráni prvok z množiny , teda vráti množinu obsahujúcu všetky prvky okrem .
Napríklad a .
Pozor na poradie argumentov a na fakt, že v množinách sa prvky neopakujú a sú usporiadané. Nepoužite žiadne pomocné funkcie ani predikáty (vrátane a ). Ani v jednom z uvedených príkladov výpočet nesmie prejsť celý zoznam .
Špecifikácia:
Testovanie:
Delete_test = r:Results
Úloha. Zadefinujte funkciu , ktorá zjednotí množiny a .
Napríklad .
Využite (ale netestujte!), že a sú množiny. Algoritmus pre zjednotenie je podobný zlúčeniu utriedených zoznamov, vo výsledku sa však žiadny prvok nesmie opakovať. Nepoužite žiadne pomocné funkcie ani predikáty (vrátane a ).
Špecifikácia:
Testovanie:
Union_test = r:Results
Úloha. Zadefinujte funkciu , ktorá vypočíta prienik množín a .
Napríklad .
Využite (ale netestujte!), že a sú množiny. Použite podobný algoritmus ako pre zjednotenie. Nepoužite žiadne pomocné funkcie ani predikáty (vrátane a ).
Špecifikácia:
Testovanie:
Inter_test = r:Results
Úloha. Zadefinujte funkciu , ktorá vypočíta rozdiel množín a .
Napríklad .
Platia rovnaké obmedzenia a odporúčania ako v predošlých úlohách.
Špecifikácia:
Testovanie:
Diff_test = r:Results
Úloha. Zadefinujte funkciu , ktorá vypočíta symetrický rozdiel množín a .
Napríklad .
Platia rovnaké obmedzenia a odporúčania ako v predošlých úlohách.
Špecifikácia:
Testovanie:
Sdiff_test = r:Results
Úloha. Zadefinujte predikát , ktorý platí, ak je podmnožinou .
Napríklad a .
Platia rovnaké obmedzenia a odporúčania ako v predošlých úlohách.
Špecifikácia:
Testovanie:
Subset_test = r:Results
Prémiová domáca úloha du09b. (1+1+1+2+1 = 6 bodov)
Pravidlá pre prémiové domáce úlohy nájdete na http://dai.fmph.uniba.sk/courses/udp/#pdu
Jednotlivé časti úlohy budeme hodnotiť samostatne.
Body získajú najviac 3 študenti z každého termínu cvičení.
Definícia. Konečné čiastočné zobrazenie je zoznam dvojíc, ktoré sú usporiadané podľa prvých zložiek. V konečnom zobrazení sa nevyskytujú dve dvojice s rovnakou prvou zložkou.
Napríklad je konečné čiastočné zobrazenie, ale zoznamy , ani nie sú konečné čiastočné zobrazenia.
Konečné čiastočné zobrazenia sú špeciálnym typom asociatívnych zoznamov z prémiovej domácej úlohy du07a(iii).
(i) (1 bod) Zadefinujte predikát , ktorý platí práve vtedy, keď je konečné čiastočné zobrazenie.
Definícia. Ak dvojica patrí do konečného čiastočného zobrazenia , tak hodnotu nazývame obrazom hodnoty v zobrazení a hodnotu nazývame vzorom hodnoty v zobrazení .
Napríklad obrazom hodnoty vo vyššie uvedenom zobrazení je . Obraz hodnoty v zobrazení neexistuje.
(ii) (1 bod) Zadefinujte funkciu , ktorej hodnotou je ak je obrazom hodnoty v zobrazení . Ak obraz neexistuje, hodnotou je .
Využite, ale netestujte, že je konečné čiastočné zobrazenie!
Špecifikácia
alebo ekvivalentne
Definícia. Definičným oborom konečného čiastočného zobrazenia nazývame množinu () všetkých vzorov v zobrazení .
Napríklad definičným oborom vyššie uvedeného zobrazenia je .
(iii) (1 bod) Zadefinujte funkciu , ktorej hodnotou je definičný obor k. č. zobrazenia .
Využite, ale netestujte, že je konečné čiastočné zobrazenie!
Definícia. Obrazom množiny v konečnom čiastočnom zobrazení nazývame množinu všetkých obrazov jednotlivých prvkov množiny v zobrazení .
Napríklad obrazom množiny vo vyššie uvedenom zobrazení je .
(iv) (2 body) Zadefinujte funkciu , ktorej hodnotou je obraz množiny v k. č. zobrazení .
Využite, ale netestujte, že je konečné čiastočné zobrazenie a je množina! Výsledkom musí byť množina. Nepoužite predchádzajúce funkcie okrem .
Definícia. Zložením konečných čiastočných zobrazení a je konečné čiastočné zobrazenie , pre ktoré platí
alebo ekvivalentne pomocou :
Napríklad
(v) (1 bod) Zadefinujte funkciu , ktorej hodnotou je zloženie k. č. zobrazení a .
Využite, ale netestujte, že a sú konečné čiastočné zobrazenia. Využite predchádzajúce funkcie podľa potreby.