Programowanie funkcyjne/Wyliczanie procesów/Ćwiczenia: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Linia 23: | Linia 23: | ||
<br/> | <br/> | ||
Przyjmujemy, że wynikiem dla listy pustej jest lista pusta. <br />Przykład: | Przyjmujemy, że wynikiem dla listy pustej jest lista pusta. <br />Przykład: | ||
<center><math>\texttt{\mbox{podziel}} [2; 3; 1; 6; 5; 4; 7; 9; 10; 11; 8] = | <center><math> \texttt{\mbox{podziel}} [2; 3; 1; 6; 5; 4; 7; 9; 10; 11; 8] = | ||
[[2; 3; 1]; [6; 5; 4]; [7]; [9; 10; 11; 8]]</math></center>. | [[2; 3; 1]; [6; 5; 4]; [7]; [9; 10; 11; 8]]</math></center>. | ||
Rozwiązując to zadanie powinieneś skorzystać z rekurencji, ale wolno Ci korzystać wyłącznie z rekurencji ogonowej. | Rozwiązując to zadanie powinieneś skorzystać z rekurencji, ale wolno Ci korzystać wyłącznie z rekurencji ogonowej. |
Wersja z 09:13, 27 lip 2006
Ćwiczenia
- Porównaj foldr i foldl. Która z nich jest ogonowa?
- Potęgowanie liczb - liniowe i logarytmiczne, ogonowe.
- Rozważ standardowe procedury przetwarzania list: length, map, append,rev. Czy w ich przypadku definicja ogonowa zmniejsza złożoność pamięciową?
- Potęgowanie funkcji - najpierw liniowe, potem logarytmiczne, ale obie wersje z rekurencją ogonową. Rozrysować w jaki sposób oblicza się:
iterate 2 (function x -> x * (x+1)) 2 iterate 3 (function x -> x * (x+1)) 1
(w zależności od wersji, cierpliwości i powierzchni tablic :-). W przypadku wersji logarytmicznej, procedura wynikowa jest obliczana w czasie logarytmicznym, ale ona sama działa w czasie liniowym.
Laboratorium
- Napisz procedurę sześciany: int int list taką, że wynikiem sześciany jest lista postaci . Rozwiązując to zadanie:
- możesz korzystać wyłącznie z rekurencji ogonowej,
- jedyne operacje na liczbach, z jakich możesz korzystać to: +, - oraz porównywanie.
- Napisz procedurę podziel: int list int list list,która dla danej listy zawierającej permutację zbioru znajdziejej podział na jak najliczniejszą listę list postaci:
taką że:
Przyjmujemy, że wynikiem dla listy pustej jest lista pusta.
Przykład:
.
Rozwiązując to zadanie powinieneś skorzystać z rekurencji, ale wolno Ci korzystać wyłącznie z rekurencji ogonowej.