Programowanie funkcyjne/Funktory/Ćwiczenia: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 1: | Linia 1: | ||
==Ćwiczenia== | |||
* | * Podaj sygnaturę implementacji struktury danych liczb zespolonych (wyłącznie konstruktory i selektory biegunowe i prostokątne). Sygnatura powinna pasować do dowolnej implementacji: biegunowej, prostokątnej lub mieszanej. Naszkicuj implementację reszty pakietu liczb zespolonych, jako funktor, którego parametrem jest implementacja struktury danych, a wynikiem w pełni funkcjonalny pakiet. | ||
* Przypomnijmy sobie pakiet liczb wymiernych z poprzedniego wykładu. Można go zapisać w postaci funktora, sparametryzowanego (wybranym typem) liczb całkowitych. Podaj sygnaturę liczb całkowitych zawierającą wszystkie operacje potrzebne do zaimplementowania pakietu liczb wymiernych ze skracaniem ułamków. (Potrzebne są: operacje arytmetyczne, równość, modulo i ew. porównywanie.) Naszkicuj budowę funktora implementującego taki pakiet liczb wymiernych. | |||
* Wyobraźmy sobie pakiet implementujący wielomiany, wraz z rozmaitymi operacjami na wielomianach: suma, różnica, iloczyn, iloraz, reszta z dzielenia, porównanie, pochodna, itp. Pakiet taki może być sparametryzowany typem liczb (ciałem), nad którym rozpatrujemy wielomiany. Podaj odpowiednie sygnatury i naszkicuj sposób implementacji pakietu wielomianów jako funktora. Czy implementacja jest na tyle ogólna, aby pakiet działał nie tylko dla liczb zmiennopozycyjnych, ale również dla zespolonych i wymiernych? | |||
* Korzystając z wyników poprzednich ćwiczeń podaj, jak można skonstruować pakiet funkcji wymiernych? (Jest to pakiet liczb wymiernych, których współczynniki są wielomianami.) | |||
* Korzystając z wyników poprzednich ćwiczeń podaj, jak można skonstruować pakiet wielomianów dwóch zmiennych? (Są to wielomiany jednej zmiennej, których współczynniki są wielomianami drugiej zmiennej.) | |||
* Porównaj funktory z mechanizmem dziedziczenia w programowaniu obiektowym. W jaki sposób można zasymulować hierarchię klas za pomocą funktorów? Co z rzutowaniem typów? Co z metodami wirtualnymi? (Nie wiem czy to dobre zadanie. Może tak, a może jest już zbyt późno, ale jakiś związek widzę.) | |||
* | |||
* | |||
* | |||
* | |||
* | |||
Wersja z 20:31, 19 lip 2006
Ćwiczenia
- Podaj sygnaturę implementacji struktury danych liczb zespolonych (wyłącznie konstruktory i selektory biegunowe i prostokątne). Sygnatura powinna pasować do dowolnej implementacji: biegunowej, prostokątnej lub mieszanej. Naszkicuj implementację reszty pakietu liczb zespolonych, jako funktor, którego parametrem jest implementacja struktury danych, a wynikiem w pełni funkcjonalny pakiet.
- Przypomnijmy sobie pakiet liczb wymiernych z poprzedniego wykładu. Można go zapisać w postaci funktora, sparametryzowanego (wybranym typem) liczb całkowitych. Podaj sygnaturę liczb całkowitych zawierającą wszystkie operacje potrzebne do zaimplementowania pakietu liczb wymiernych ze skracaniem ułamków. (Potrzebne są: operacje arytmetyczne, równość, modulo i ew. porównywanie.) Naszkicuj budowę funktora implementującego taki pakiet liczb wymiernych.
- Wyobraźmy sobie pakiet implementujący wielomiany, wraz z rozmaitymi operacjami na wielomianach: suma, różnica, iloczyn, iloraz, reszta z dzielenia, porównanie, pochodna, itp. Pakiet taki może być sparametryzowany typem liczb (ciałem), nad którym rozpatrujemy wielomiany. Podaj odpowiednie sygnatury i naszkicuj sposób implementacji pakietu wielomianów jako funktora. Czy implementacja jest na tyle ogólna, aby pakiet działał nie tylko dla liczb zmiennopozycyjnych, ale również dla zespolonych i wymiernych?
- Korzystając z wyników poprzednich ćwiczeń podaj, jak można skonstruować pakiet funkcji wymiernych? (Jest to pakiet liczb wymiernych, których współczynniki są wielomianami.)
- Korzystając z wyników poprzednich ćwiczeń podaj, jak można skonstruować pakiet wielomianów dwóch zmiennych? (Są to wielomiany jednej zmiennej, których współczynniki są wielomianami drugiej zmiennej.)
- Porównaj funktory z mechanizmem dziedziczenia w programowaniu obiektowym. W jaki sposób można zasymulować hierarchię klas za pomocą funktorów? Co z rzutowaniem typów? Co z metodami wirtualnymi? (Nie wiem czy to dobre zadanie. Może tak, a może jest już zbyt późno, ale jakiś związek widzę.)