
#programowaniefunkcyjne #haskell #programowanie
Mam takie zadanko:
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?
Mam takie zadanko:
Niech będzie dany następujący typ drzew:
data Tree a b = Leaf a | Node a b (Tree a b) (Tree a b)Proszę zdefniować funkcjęmap' b f t, która zastosuje funkcjęfdo wszystkich elementów typub.
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?
- Najlepsze
- Wszystkie komentarze




![Seria brutalnych ataków na ulicach Wrocławia. Napadł na przypadkowe osoby [FILM]](https://wykop.pl/cdn/c3397993/0bde7de838c4b181e0659336979efefb37122ad7a21691c1c986b045ba5849fa,q80.jpg)


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