Questions / réponses

Évaluation fonction at_depth

Évaluation fonction at_depth

StarkJon -
回帖数:2

Bonjour,


Ma fonction at_depth fonctionne en local et me renvoie bien le bon résultat lorsque je l'appelle avec les paramètres donnés en exemple dans l'évaluation de Moodle, sauf que ça ne marche pas :


Fonction at_depth
Échec sur les arguments suivants:
(Bin (56, Empty, Empty), 0)

Fonction at_depth
Échec sur les arguments suivants:
(Bin (37, Empty, Empty), 0)

Je ne vois pas d'où provient le problème...


Merci,

Cordialement,

Jon STARK

回复StarkJon

Re: Évaluation fonction at_depth

ZeitounMarc -

Bonsoir,

Le code

  

let at_depth t d = 
    if d < 0 then [] else
    let rec at_depth_aux t a acc = match t with
        |Empty -> acc
        |Bin(x,Empty,Empty) -> x::acc
        |Bin(x,t1,t2) -> if a=d then (x::acc) else at_depth_aux (t1) (a+1) (at_depth_aux t2 (a+1) acc)
    in at_depth_aux t 1 []
ne peut pas être correct, car la fonction at_depth dépend de la profondeur d (son second argument) et ce n'est pas le cas dans ce code (sauf pour distinguer si d < 0 ou d >= 0).


En effet, le code proposé a cette forme :

let at_depth t d = 
  if d <= 0 then [] else
    [................]
  in at_depth_aux t 1 [] (********** <=== ici, d n'intervient pas **********)
Autrement dit, l'appel à at_depth_aux devrait faire intervenir la profondeur d.


--mz


回复ZeitounMarc

Re: Évaluation fonction at_depth

DuchonPhilippe -

La fonction at_depth_aux dépend de d, donc la fonction at_depth en dépend également.

Mais elle est écrite bizarrement... j'y repère au moins deux erreurs qui me semblent indépendantes!


Sur l'arbre suivant:

Bin(0,Bin(3,Empty,Empty),Empty)

elle donne les résultats suivants, tous faux:

pour la profondeur 0: [3] (la réponse correcte étant [0])

pour la profondeur 1: [0] (la réponse correcte étant [3])

pour la profondeur 2: [3] (la réponse correcte étant [])