Questions / réponses

merge_sort

merge_sort

di Alba Martinez Anton -
Numero di risposte: 1

Bonjour,

Lorsque je teste ma fonction merge_sort sur l'interpréteur, elle fonctionne alors que lorsque je le copie sur moodle, lors de l'évaluation il y a écrit qu'il y a un problème de syntaxe à la dernière ligne. Je ne comprends pas d'où vient l'erreur.

Voici le code de ma fonction:

let rec merge_sort l = match l with 

    [] -> []

    |[a] -> [a]

    | a::q -> let (l1,l2)= split l in 

    merge (merge_sort l1) (merge_sort l2);;

In riposta a Alba Martinez Anton

Re: merge_sort

di Marc Zeitoun -

Le problème n'est pas dans la fonction merge_sort, mais dans la fonction split.

L'erreur est que son code est terminé par un unique point virgule (au lieu de 2), ce qui a une signification particulière en OCaml : on s'en sert pour une séquence d'instructions (comme en C). 

Dans ce cas la séquence s'évalue en (), de type unit. OCaml en déduit donc que la fonction doit retourner (), ce qui provoque une erreur de type (qui est bien indiquée sous l'interpréteur).

Comme merge_sort dépend de split, elle est également inutilisable.

Conseil: ne pas utiliser ;; et sous Emacs, commencer toutes les phrases par let.

La séquence ne sera pas utilisée dans ce cours.