Programowanie funkcyjne/Procedury wyższych rzędów/Ćwiczenia
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Ćwiczenia
- Dane są: definicja typu tree i procedura fold_tree:
type tree = Node of tree * int * tree | Leaf;; let rec fold_tree f a t = match t with Leaf -> a | Node (l, x, r) -> f x (fold_tree f a l) (fold_tree f a r);;
Powiemy, że liczba w węźle drzewa jest widoczna, jeżeli na ścieżce od tego węzła do korzenia drzewa nie ma większej liczby. W szczególności liczba w korzeniu drzewa jest zawsze widoczna, a liczby mniejsze od niej nie są nigdy widoczne.
- Napisz procedurę widoczne:drzewo int, która dla zadanego drzewa (zawierającego wyłącznie liczby nieujemne) obliczy liczbę widocznych liczb. Rozwiązując to zadanie nie wolno Ci tworzyć żadnych definicji rekurencyjnych. Powinieneś natomiast skorzystać z procedury fold_tree.
Laboratorium
- Niech będzie funkcją 1-1 i "na" oraz taką, że , jest rosnąca i . Zaimplementuj procedurę odwrotność, której wynikiem dla parametru będzie przybliżenie z dokładnością zadaną przez stałą epsilon (czyli jeśli , to ).
- Wygładzenie funkcji z odstępem polega na uśrednieniu , i . Napisz procedurę wygładzającą daną funkcję z zadanym odstępem.
- Punktem stałym funkcji jest . Zaimplementuj obliczanie -tego pierwiastka z za pomocą obliczania punktu stałego i tłumienia przez uśrednianie. Uwaga: ile razy należy stosować tłumienie w zależności od ?
- Napisz odpowiedniki map i filter dla drzew. Rozważ drzewa binarne i drzewa o wierzchołkach dowolnego skończonego stopnia (por. ćw. do poprzedniego wykładu).