Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:pp:haskell:lab-monads [2020/05/25 15:30] msl [Zadania:] |
pl:dydaktyka:pp:haskell:lab-monads [2020/06/01 15:34] (aktualna) msl [Zadania:] |
- Przeczytaj o monadzie [[http://learnyouahaskell.com/for-a-few-monads-more#state|State]]. Zaimplementuj poniższe operacje jako //stateful computations// dla **starego** drzewa z [[https://ai.ia.agh.edu.pl/pl:dydaktyka:pp:haskell:lab-types|poprzedniego laboratorium]]: | - Przeczytaj o monadzie [[http://learnyouahaskell.com/for-a-few-monads-more#state|State]]. Zaimplementuj poniższe operacje jako //stateful computations// dla **starego** drzewa z [[https://ai.ia.agh.edu.pl/pl:dydaktyka:pp:haskell:lab-types|poprzedniego laboratorium]]: |
* insert - umieszcza element w drzewie | * insert - umieszcza element w drzewie |
* remove - usuwa element z drzewa i zwraca go jako wynik | * removeAll - usuwa wszystkie elementy spełniające zadany warunek z drzewa i zwraca je w liście jako wynik |
* search - sprawdza, czy element jest w drzewie | * search - sprawdza, czy element jest w drzewie |
- Zadanie ekstra - zaimplementuj te same operacje dla nowego drzewa | - Zadanie ekstra - zaimplementuj te same operacje dla nowego drzewa |
Klasa ''Applicative'' umożliwa używanie funkcji opakowanych monadą. | Klasa ''Applicative'' umożliwa używanie funkcji opakowanych monadą. |
| |
Poniżej jest przykładowa implementacja ''Applicative'', która jest poprawna, ale nie dba o porządek elementów w drzewie (lepszej nam nie trzeba raczej na dzisiaj): | Poniżej jest przykładowa implementacja ''Applicative'', która jest poprawna, ale akceptuje tylko pojedyncze funkcje opakowane w liściach - na dzisiaj wystarczy: |
* ''pure'' to dokładnie to samo, co ''return''. Tak naprawdę w Monadzie zawsze można pisać: ''return = pure'' | * ''pure'' to dokładnie to samo, co ''return''. Tak naprawdę w Monadzie zawsze można pisać: ''return = pure'' |
* ''%%<*>%%'' aplikuje funkcję opakowaną monadą, taki ''fmap'', który wyjmuje funkcję z pudełka, a nie ma go pod ręką | * ''%%<*>%%'' aplikuje funkcję opakowaną monadą, taki ''fmap'', który wyjmuje funkcję z pudełka, a nie ma go pod ręką |