Programowanie funkcyjne/Funktory/Ćwiczenia: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przemek (dyskusja | edycje)
Nie podano opisu zmian
Kubica (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
==Ćwiczenia==
== Praca domowa ==
* 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.
* Napisz funktor implementujący liczby całkowite "podwójnej precyzji". Jego parametrem powinien być pakiet liczb całkowitych z ograniczonego zakresu, a wynikiem pakiet liczb całkowitych zwiększonego zakresu. Sygnatury parametru i wyniku powinny być takie same, tak aby funktor można było składać z samym sobą otrzymując liczby całkowite "poczwórnej precyzji".
* 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.  
* Napisz funktor implementujący ogólny mechanizm przeszukiwania z nawrotami (ang. ''back-tracking''). Sprecyzuj najpierw rodzaj przeszukiwania (np. czy znajdowane jest jedno rozwiązanie, wszystkie rozwiązania czy też najlepsze rozwiązanie).
* 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 wielomianami.)
== Ćwiczenia ==
* 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.)
* 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.
* 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ę.)
* 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. Napisz funktor implementujący 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) współczynników wielomianu. 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?
* Porównaj sygnatury wielomianów i liczb zastosowanych do budowy liczb wymiernych. Czy można ich użyć do stworzenia pakietu liczb wymiernych, jako ułamków, których współczynnikami wielomiany? Jeżeli nie, to co trzeba zmienić? Zwróć uwagę na skracanie ułamków.
* Korzystając z wyników poprzednich zadań podaj, jak można skonstruować pakiet wielomianów dwóch zmiennych? Czy współczynnikami wielomianów jednej zmiennej mogą być wielomiany drugiej zmiennej?
* Podaj sygnaturę struktury implementującej przestrzeń metryczną oraz zaimplementuj przestrzeń liczb rzeczywistych z metryką |...|. Napisz funktory implementujące metrykę euklidesową i typu Manhattan na produkcie kartezjańskim dwóch przestrzeni metrycznych. Jak za ich pomocą można zapisać przestrzeń <math>R^3</math> z metryką euklidesową i  Manhattan?
* Napisz funktor implementujący wybraną strategię grania w dowolną grę dwuosobową, z pełną informacją, bez losowości i z binarnym wynikiem (takiej jak szachy, Go, warcaby, Nim, czy kółko i krzyżyk), np. mini-max, alfa-beta obcięcie, drzewa and-or.

Wersja z 23:42, 22 wrz 2006

Praca domowa

  • Napisz funktor implementujący liczby całkowite "podwójnej precyzji". Jego parametrem powinien być pakiet liczb całkowitych z ograniczonego zakresu, a wynikiem pakiet liczb całkowitych zwiększonego zakresu. Sygnatury parametru i wyniku powinny być takie same, tak aby funktor można było składać z samym sobą otrzymując liczby całkowite "poczwórnej precyzji".
  • Napisz funktor implementujący ogólny mechanizm przeszukiwania z nawrotami (ang. back-tracking). Sprecyzuj najpierw rodzaj przeszukiwania (np. czy znajdowane jest jedno rozwiązanie, wszystkie rozwiązania czy też najlepsze rozwiązanie).

Ć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. Napisz funktor implementujący 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) współczynników wielomianu. 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?
  • Porównaj sygnatury wielomianów i liczb zastosowanych do budowy liczb wymiernych. Czy można ich użyć do stworzenia pakietu liczb wymiernych, jako ułamków, których współczynnikami są wielomiany? Jeżeli nie, to co trzeba zmienić? Zwróć uwagę na skracanie ułamków.
  • Korzystając z wyników poprzednich zadań podaj, jak można skonstruować pakiet wielomianów dwóch zmiennych? Czy współczynnikami wielomianów jednej zmiennej mogą być wielomiany drugiej zmiennej?
  • Podaj sygnaturę struktury implementującej przestrzeń metryczną oraz zaimplementuj przestrzeń liczb rzeczywistych z metryką |...|. Napisz funktory implementujące metrykę euklidesową i typu Manhattan na produkcie kartezjańskim dwóch przestrzeni metrycznych. Jak za ich pomocą można zapisać przestrzeń R3 z metryką euklidesową i Manhattan?
  • Napisz funktor implementujący wybraną strategię grania w dowolną grę dwuosobową, z pełną informacją, bez losowości i z binarnym wynikiem (takiej jak szachy, Go, warcaby, Nim, czy kółko i krzyżyk), np. mini-max, alfa-beta obcięcie, drzewa and-or.