j'ai besoin de votre aide pour résoudre les 2 fonctions/problèmes suivants:Cartographie du Liste dans un arbre
1)
Je dois remplacer les éléments dans un arbre. La branche de l'arbre peut avoir n'importe quel nombre de sous-branches comme indiqué ci-dessous dans le code.
data Tree a = Leaf a | Branch a [(Tree a)] deriving (Show)
mapmtree :: (a -> a) -> Tree a -> Tree a
mapmtree f (Leaf a) = (f a)
mapmtree f (Branch a c) = Branch (map f a) (mapmtree f c)
Je dois me déplacer à travers les éléments et les changer. Mon problème est dans la dernière ligne. La fonction mapmtree accepte (Tree a) mais la branche peut avoir une liste de sous-branches donc il n'est pas possible de compiler le code ci-dessus car il donne des erreurs. Comment puis-je appeler la fonction mapmtree sur les sous-listes de la branche?
C'est l'erreur que je reçois quand je le charge:
Couldn't match expected type `Tree a'
against inferred type `[Tree a]'
In the second argument of `mapmtree', namely `c'
In the second argument of `Branch', namely `(mapmtree f c)'
In the expression: Branch (map f a) (mapmtree f c)
2)
La deuxième traite de transformer un arbre en liste -première profondeur C'est le code j'ai maintenant mais je suis coincé et je ne sais pas comment aller plus loin:
data Tree a = Leaf a | Branch a [(Tree a)] deriving (Show)
mtree2list :: Tree a -> [a]
mtree2list (Leaf a) = [a]
mtree2list (Branch a c) = a : (mtree2list c)
Besoin d'aide aussi comment Mettre en œuvre. Le même problème que ci-dessus, la branche peut avoir de nombreux sous-arbres et doivent passer par eux profondeur d'abord pour faire une liste des éléments. S'il vous plaît suis un débutant total dans Haskell alors ne soyez pas en colère contre moi.
Merci
Veuillez noter que vous voulez réellement créer un Functor. SO change 'maptree' en' fmap' et en fait l'instance de la classe de type 'Functor'. Vous devez changer votre typeignatue en effet. – fuz