Zadania na 12.12.2007
|
Zadanie 1 Napisz naiwna funkcje obliczajaca n-ty
wyraz ciagu Fibonacciego w stylu kontynuacyjnym. Nastepnie
zdefunkcjonalizuj kontynuacje w swoim rozwiazaniu.
|
Zadanie 2 Napisz funkcje w stylu kontynuacyjnym
wyznaczajaca iloczyn etykiet (liczb calkowitych) w drzewie binarnym,
ze specjalnym uwzglednieniem przypadku, gdy w drzewie
znajduje sie 0. Nastepnie: (1) przeksztalc ja do zwyklego stylu z
uzyciem operatora call/cc, (2) zdefunkcjonalizuj kontynuacje w swoim
rozwiazaniu.
|
Zadanie 3 Napisz bezposrednio lub wyprowadz przy
pomocy refunkcjonalizacji i transformacji ze stylu kontynuacyjnego
funkcje, ktora sprawdza czy dana lista jest palindromem, uzywajac n/2
wywolan rekurencyjnych, gdzie n jest nieznana dlugoscia listy.
|
Zadanie 4 Zapisz funkcje backtrack z wykladu w
stylu kontynuacyjnym. Pamietaj, ze w tym stylu wszystkie funkcje (poza
trywialnymi) przyjmuja kontynuacje jako dodatkowy argument. Na przyklad, wywolaniu
backtrack (fn amb => if (amb()) then 1 else 2)
bedzie teraz odpowiadalo wywolanie
backtrack (fn amb => fn k => amb (fn b => if b then k 1 else k 2)) (fn x => x).
|
Zadanie 5 Rozszerz definicje funkcji backtrack z
wykladu o mozliwosc zglaszania porazek w czasie obliczen z
nawrotami. Zgloszenie porazki, realizowane przez wywolanie
bezparametrowej funkcji fail, powinno spowodowac wycofanie sie z
biezacej galezi obliczen do najblizszego rozgalezienia, w ktorym jakas
galaz nie byla jeszcze probowana. Na przyklad, wyrazenie
backtrack (fn amb => fn fail =>
if amb()
then if amb()
then 1
else fail()
else if amb()
then 3
else 4)
powinno miec wartosc [4,3,1].
Wykorzystaj swoja funkcje backtrack do napisania funkcji bitseq, ktora
dla danych liczb naturalnych n oraz s, znajdzie wszystkie ciagi
zero-jedynkowe, ktorych dlugosc wynosi n, a suma (tj. liczba jedynek)
s.
|
Zadanie 6 Wykorzystaj podany na wykladzie
mechanizm tworzenia i uzywania wspolprogramow do rozwiazania problemu
tej samej korony (same-fringe problem). Dwa drzewa maja taka sama
korone, jesli etykiety w ich lisciach czytane od lewej do prawej
tworza jednakowe ciagi. Np.
|
Zadanie 7 Uzywajac operatora call/cc oraz
kolejki, zaproponuj prosta implementacje (anonimowych) procesow
wspolbieznych. Uruchomiony proces moze dobrowolnie oddac sterowanie do
systemu. Wowczas zostaje on wstawiony na koniec kolejki procesow, a
uruchomiany lub wznowiony zostaje pierwszy proces z
kolejki. Przetestuj swoje rozwiazanie na grupie procesow, ktore
wspolpracuja, zeby wypisywac na wyjscie jakis konkretny napis.
|
|