Questions / réponses

btree_perfect

btree_perfect

par Fernando Rivera Villalobos,
Nombre de réponses : 3

La fonction <btree_perfect> doit retourner ''l'arbre parfait de hauteur h avec des noeuds contenant tous 0'', donc un arbre de type <'a btree = Empty | Node of 'a * 'a btree * 'a btree>


Pourtant l'erreur de compilation affiche: "This expression has type int Type.btree
but an expression was expected of type int". Pourquoi la fonction attend-elle un entier, alors que la consigne me dis que je dois retourner retourner un arbre?

En réponse à Fernando Rivera Villalobos

Re: btree_perfect

par Marc Zeitoun,

C'est normal : je vois dans le code soumis sur Moodle btree_perfect h-1

Comme en OCaml, l'application de fonction est plus prioritaire que la soustraction, ceci est la même chose que (btree_perfect h)-1, et OCaml se plaint d'avoir à soustraire un arbre et un entier. Règle simple si on n'est pas sûr des priorités : parenthéser les arguments des fonctions, sauf s'il s'agit d'identificateurs ou de constantes de types simples.


En réponse à Marc Zeitoun

Re: btree_perfect

par Fernando Rivera Villalobos,

J'ai corrige la priorité des opérations, mais la fonction n'accepte pas l'arbre vide pour le parametre 0.


Doit-on ne renvoyer un arbre vide que pour le parametre -1? Si c'est le cas, alors est 0 un parametre invalide?

En réponse à Fernando Rivera Villalobos

Re: btree_perfect

par Marc Zeitoun,

Je vois que c'est corrigé et ok maintenant, mais je réponds quand même : la hauteur de l'arbre vide est, par convention, -1 (et non 0). La fonction ne doit donc pas retourner l'arbre vide sur l'argument 0, mais l'arbre à un seul noeud, qui est de hauteur 0 : Node(0, Empty, Empty).

--mz