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:47]
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 instancję Monady. +  - Zaimplementuj klasę ''​Functor''​ dla nowego typu ''​Tree''​ 
- +  ​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
-  - Zaimplementuj klasę ''​Functor'' ​dla typu ''​Tree''​. +  - Zadanie ekstra - zaimplementuj te same operacje ​dla nowego drzewa 
-    * w wersji podstawowej ''​fmap''​ nie musi dbać o porządek drzewa (będzie za to połowa punktów) +    * podpowiedź:​ {{tree.png?​linkonly=yes}}
-  - Zaimplementuj klasę ''​Monad''​ dla tego samego typu. +
-    * w wersji podstawowej ''>>​=''​ nie musi dbać o porządek drzewa (będzie za to połowa punktów).+
  
 <WRAP center round important 60%> <WRAP center round important 60%>
Linia 186: Linia 184:
 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 (lepszej nam nie trzeba raczej ​na dzisiaj):+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'' ​   * ''​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.1590403664.txt.gz · ostatnio zmienione: 2020/05/25 12:47 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