2010-12-03 9 views
1

High Guys,Aide pour déclarer le nombre variable d'arguments

Je dois définir un type de données polymorphique pour une arborescence pouvant comporter plusieurs nœuds. Chaque noeud peut avoir n'importe quel nombre d'enfants et un vlaue. Ce type aura toujours au moins un noeud. Je suis nouveau dans Haskell alors je demande comment puis-je déclarer le nœud pour avoir un nombre variable d'arguments.

C'est ce que j'ai maintenant. C'est un arbre qui peut avoir un noeud ou un noeud avec une valeur (a) et deux arbres enfants. Au lieu de deux enfants d'arbre, je veux qu'ils soient un nombre quelconque d'enfants d'arbres. (Analoog comme nombre variable d'arguments java "arg ...")

data Tree a = Node a | Node a (Tree a) (Tree a) deriving (Show) 

Merci pour avoir votre aide

EDIT

Une petite question ::: Comment puis-je déclarer ce nœud avec arguments variables dans une fonctions Paramètre (en-tête/signature). Je dois implémenter une fonction appelée
"contient" qui va vérifier si un nœud contient un élément spécifique.

contains :: Tree a -> b -> Bool 
contains (Node val [(tree)]) = ...... 

La deuxième ligne est-elle correcte?

Répondre

4

ce serait:

data Tree a = Node a | Node a [(Tree a)] deriving (Show) 

mais en plus il y a un deuxième problème que cela devrait être

data Tree a = Leaf a | Branch a [(Tree a)] deriving (Show) 

ou comme les parties d'un syndicat doit avoir des noms différents sinon vous couldn « motif de t correspondant à l'utilisation

Leaf et Branch sont données constructeurs si:

Branch 1 [Leaf 3, Branch 6 [Leaf 5]] 

est un exemple d'un Tree


contains :: Tree a -> a -> Boolean 
contains (Leaf a) b = a == b 
contains (Branch a c) b = a == b || any (map (\t -> contains t b) c) 

ou ces

+0

Merci beaucoup pour votre réponse rapide – kap

+0

J'ai mis à jour S'il vous plaît la question principale. Pouvez-vous m'aider à résoudre ce problème? Merci. – kap

+0

Merci encore pour votre réponse. Pouvez-vous s'il vous plaît expliquer le "tout" et le "\ t" pour moi. Je comprends bien la fonction de la carte mais le "tout" et "\ t". parties je ne les comprends pas. Merci – kap

Questions connexes