Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:pp:haskell:lab-monads [2020/05/25 12:40]
msl [Zadania:]
pl:dydaktyka:pp:haskell:lab-monads [2020/06/01 15:34] (aktualna)
msl [Zadania:]
Linia 168: Linia 168:
  
 <code haskell> <code haskell>
-data Tree a = Leaf a | Node (Tree a) (Tree a)+data Tree a = Empty | Leaf a | Node (Tree a) (Tree a)
 </​code> ​ </​code> ​
  
-Różnice między drzewm z [[https://​ai.ia.agh.edu.pl/​pl:​dydaktyka:​pp:​haskell:​lab-types|poprzednich]] i dzisiejszych zajęć wynikają z tego, że w poprzedniej definicji dużo trudniej zaimplementować jest klasę Monady. +  ​- Zaimplementuj klasę ''​Functor''​ dla nowego ​typu ''​Tree''​
- +
-  ​- Zaimplementuj klasę ''​Functor''​ dla typu ''​Tree''​+
   - Zaimplementuj klasę ''​Monad''​ dla tego samego typu.   - Zaimplementuj klasę ''​Monad''​ dla tego samego typu.
-  - Przeczytaj o monadzie [[http://​learnyouahaskell.com/​for-a-few-monads-more#​state|State]]. Zaimplementuj poniższe operacje jako //stateful computations//:​+  - 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
 +    * podpowiedź:​ {{tree.png?​linkonly=yes}}
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-UWAGA: w zależności od wersji Haskella, może być konieczne również zaimplementowanie klasy ''​Applicative''​ (jako wymagania do bycia monadą). +**UWAGA**: w zależności od wersji Haskella, może być konieczne również zaimplementowanie klasy ''​Applicative''​ (jako wymagania do bycia monadą). 
-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 ​drzewie+Poniżej jest przykładowa implementacja ''​Applicative'',​ która jest poprawna, ale akceptuje tylko pojedyncze funkcje opakowane ​liściach - na dzisiaj wystarczy
-  * ''​pure''​ to dokładnie to samo, co ''​return'​. Tak naprawdę w Monadzie zawsze można pisać: ''​return = pure'' ​:D +  * ''​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 gopod ręką+  * ''​%%<*>%%''​ aplikuje funkcję opakowaną monadą, taki ''​fmap'',​ który wyjmuje funkcję z pudełka, a nie ma go pod ręką
  
 <code haskell> <code haskell>
 instance Applicative Tree where instance Applicative Tree where
    pure x = Leaf x    pure x = Leaf x
 +   _ <*> Empty = Empty
    (Leaf f) <*> (Leaf x) = Leaf (f x)    (Leaf f) <*> (Leaf x) = Leaf (f x)
    (Leaf f) <*> (Node x y) = Node (fmap f x) (fmap f y)    (Leaf f) <*> (Node x y) = Node (fmap f x) (fmap f y)
pl/dydaktyka/pp/haskell/lab-monads.1590403237.txt.gz · ostatnio zmienione: 2020/05/25 12:40 przez msl
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0