Aktywne Wpisy

lubie-sernik +220
źródło: 1000056240
Pobierz
scarecrov +72
Wołam plusujących poniższy wpis
https://wykop.pl/wpis/79567589/za-1-5-roku-koncze-30-lat-cel-jest-taki-aby-do-teg
Udało się dzień wcześniej, ostatnia faktura opłacona na czas.
Podsumowanie od ostatniego wpisu:
https://wykop.pl/wpis/79567589/za-1-5-roku-koncze-30-lat-cel-jest-taki-aby-do-teg
Udało się dzień wcześniej, ostatnia faktura opłacona na czas.
Podsumowanie od ostatniego wpisu:
źródło: image
Pobierz




Mam takie zadanko:
data Tree a b = Leaf a | Node a b (Tree a b) (Tree a b)Nie do końca wiem jak się za to zabrać - z tego co zdążyłem na stacku wyczytać w Haskellu nie ma możliwości w "runtime'ie" sprawdzić typ podstawionego argumentu, jak mam zatem sprawdzać, czy dany element drzewa faktycznie jest np. Node'm/Leaf'em? Mam napisać kilka deklaracji tej samej funkcji z określeniem przyjmowanego typu i typu który jest obecnie "brany pod uwagę" dla wszystkich możliwości?
Edit: Zapomniałem podziękować - dzięki za wskazówki :)
mapTree (Node a b c d) f (Leaf e) =mapTree (Node a b c d) f (Node a b c d) =
mapTree (Leaf a) f (Leaf a) =
mapTree (Leaf e) f (Node a b c
Potem właśnie musisz w obsluzyc wszystkie przypadki odpowiednimi wzorcami i zaleznie od tego co zostało zmatchowane odpowiednio zareagować.
Nie do końca widzę to co napisaleś, z grubsza bedzie to cos takiego:
mapTree :: (Tree a b)mapTree :: ... -> (Tree a b) -> ....... -> (Tree x b)mapTree Leaf(a) = Leaf(f(a))
mapTree Node(....) => costam innego
zauwaz ze po drodze moze zmienic sie typ z a na x bo funkcja f moze zwracac inny typ niz a. Moglem gdzies zrobic blad po drodze ale ogolnie taka jest idea