Questions / réponses

parameters_gen

parameters_gen

door Sara Real Santos -
Aantal antwoorden: 4
Bonjour,

Chaque fois que je teste parameters_gen (le retour)  avec les arbres proposés sur moodle, ça marche sur emacs mais pas sur moodle. Quelle pourrait être l'erreur de mon code? J'arrive pas à la retrouver.

Par exemple, ça ne fonctionne pas pour l'arbre Bin (30, Empty, Empty), alors que quand je le test sur emacs avec ma fonction parameters_gen  et j'ai (0, 1, 0, 0, -1, -1), ce qui me semble juste.


Merci,

Cordialement,

Sara Real


Als antwoord op Sara Real Santos

Re: parameters_gen

door Marc Zeitoun -

Ça ne peut pas être correct, car un comme un nœud est soit une feuille, soit d'arité 1, soit d'arité 2, la première composante doit être la somme des 3 suivantes. Voir un des posts précédents.

Le test utilise la fonction "être divisible par 3", (fun x -> x mod 3 = 0).

Donc sur l'exemple, on devrait retourner (1, 1, 0, 0, 0, 0).

- 1 nœud d'étiquette divisible par 3: c'est le seul nœud qui est la racine.

- 1 feuille d'étiquette divisible par 3 (parce que la racine est une feuille).

- 0 nœud d'arité 1 ou 2, puisqu'il n'y en a aucun dans cet arbre.

- Il y a une seule branche: (30) et tous ses nœuds sont divisibles par 3. La branche est de longueur 0 (pas d'arête), ce qui explique les 2 dernières coordonnées.

Als antwoord op Marc Zeitoun

Re: parameters_gen

door Sara Real Santos -

Désolée de vous demander à nouveau,

j'ai modifié ma fonction et j'ai retesté pour Bin (39, Bin (62, Empty, Empty), Empty) (un des arbres où j'ai des erreurs sur moodle), est-ce que le retour correct est bien (1, 0, 1, 0, 0, 1)? C'est ce que j'obtiens quand je compile sur emacs.

Merci,

Cordialement,


Sara Real

Als antwoord op Sara Real Santos

Re: parameters_gen

door Alexandre Legendre -

let _ = parameters_gen (fun x -> x mod 3 = 0) (Bin (39, Bin (62, Empty, Empty), Empty) );;

  val parameters_gen :

  ('a -> bool) -> 'a tree -> int * int * int * int * int * int = <fun>

#   - : int * int * int * int * int * int = (1, 0, 1, 0, -1, 1)

Als antwoord op Alexandre Legendre

Re: parameters_gen

door Philippe Duchon -

Sur cet exercice, vous êtes un certain nombre à avoir réussi à écrire la fonction, mais je ne suis pas certain que beaucoup l'aient fait en ne parcourant l'arbre qu'une seule fois. Je vois beaucoup de fichiers où vous avez 6 fonctions, une pour chaque paramètre; et souvent elles s'appellent les unes les autres, ce qui, au final, n'est pas très efficace (la complexité est souvent plus que linéaire).

La question à se poser est en gros la suivante: pour un arbre non vide, si j'ai les valeurs des 6 paramètres pour le sous-arbre gauche et pour le sous-arbre droit (ainsi que la valeur du prédicat p sur la racine de l'arbre), est-ce que je peux déterminer les valeurs des 6 paramètres pour l'arbre entier?

Si c'est le cas, alors il devrait suffire de faire ces deux appels récursifs (et de garder les résultats avec deux "let") et d'écrire une grosse expression pour le résultat.

Si ce n'est pas le cas, alors il faut trouver un paramètre supplémentaire tel que, si on ajoute les valeurs de ce paramètre supplémentaire pour les deux sous-arbres, alors on peut déterminer les valeurs pour l'arbre entier - à la fois des 6 paramètres de départ, et du 7e qu'on vient d'ajouter. Et on écrit une fonction auxiliaire retournant les 7 paramètres, pour ne retourner que les 6 qui sont demandés...