ϵ">]>
3. CVIČENIE Z PREDMETU ÚVOD DO DEKLARATÍVNEHO PROGRAMOVANIA
http://ii.fmph.uniba.sk/cl/courses/1-AIN-505-udp/0809ls/ex/ex03.cl
Dátum: 8. a 10. 3. 2010
Odporúčaná verzia CL: 5.81.19
WWW stránka predmetu: http://ii.fmph.uniba.sk/cl/courses/1-AIN-505-udp/0910ls/?lang=sk
Párovacia funkcia CL
Párovacia funkcia zabudovaná do CL je založená na enumerácii (očíslovaní) binárnych stromov. Zapisuje sa infixovým operátorom "," (čiarka), napr. . Podobne ako pre iné párovacie funkcie, pre funkciu "," platí:
sa nerovná žiadnemu páru: ,
každé nenulové číslo je pár: ,
ak sa dva páry rovnajú, rovnajú sa po zložkách: ,
zložky páru sú menšie ako pár: , .
Zabudované funkcie a majú vlastnosti a . Na definovanie funkcií je výhodnejšie používať párovú diskrimináciu:
Zoznamy
Pomocou párovacej funkcie môžeme zakódovať postupnosti čísel ľubovoľnej dĺžky — zoznamy — nasledovne:
0 je prázdny zoznam,
je zoznam, ktorého prvým prvkom je a ďalšie prvky sa nachádzajú v zozname .
Šesťprvkovú postupnosť 2, 3, 5, 7, 11, 13 teda zakódujeme zoznamom .
Párovacia funkcia sa automaticky zátvorkuje doprava, teda a , a má najnižšiu prioritu zo všetkých infixových binárnych operácií v CL.
Konvencia: Na označenie prvkov budeme používať premenné , ; na označenie zoznamov premenné , , .
Poznámka: Funkcia zreťazenia je zabudovaná a zapisuje sa ++ .
Zreťazenie je asociatívne, teda . Automaticky sa zátvorkuje vľavo, teda .
Zreťazenie má vyššiu prioritu ako párovanie, preto .
Pozor! Aby ste spojili zoznam , prvok a zoznam v tomto poradí, musíte napísať . Ak napíšete bez zátvoriek, znamená to !
Úloha 2,5. Aj keď sú hodnoty výrazov a rovnaké, výpočty prebiehajú rôzne. Ktorý výraz je výpočtovo výhodnejší?
Úloha 5. Definujte funkciu , ktorá vráti posledný prvok zoznamu , ak existuje, alebo , ak je prázdny.
Napr. .
Úloha 6. Definujte funkciu , ktorá vráti -ty prvok zoznamu (počítajúc od 0):
Napr. . Funkcia má vlastnosť
Úloha 7. Definujte funkciu , ktorá vráti zoznam pozostávajúci z prvých prvkov zoznamu , teda
Napr. . Funkcia má mať vlastnosť
Úloha 8. Definujte funkciu , ktorá odstráni prvých prvkov zo zoznamu , teda
Napr. . Funkcia má mať vlastnosť
Všimnite si, že platí
Úloha 9. Definujte funkciu , ktorá vráti najmenší prvok zoznamu . Napr. .
Analogicky definujte funkciu , ktorá vráti najväčší prvok zoznamu . Napr. .
Pre prázdny zoznam obe funkcie vrátia 0. Nepoužite žiadne „bulharské“ konštanty (99999 a podobne).
Úloha 10. Definujte funkciu , ktorá vypočíta zoznam prvých hodnôt Fibonacciho funkcie, teda
Funkcia je zadefinovaná na začiatku tohto súboru.
Úloha 11. Definujte funkciu , ktorá aplikuje Fibonnaciho funkciu na všetky prvky zoznamu a vráti zoznam výsledkov:
Úloha 14. Definujte funkciu , ktorá pre zoznamy a rovnakej dĺžky vráti zoznam dvojíc prvkov zoznamov a :
Napr. .
Úloha 15. Definujte funkciu , ktorá zrotuje zoznam doľava:
Napr. . Pokúste sa o definíciu bez pomocných funkcií a bez zreťazenia.