Bonjour,
Étant donné l'extrême mocheté des codes de base fournis cette année (j'ai lu qu'ils étaient générés par automatiquement), je me suis dis que c'était une bonne occasion pour apprendre à lire sur l'entrée standard en OCaml pour me passer de ces codes (qui j'ai l'impression ralentissent l'exécution : je ne passe pas le dernier test de performance sur l'exo 1).
J'ai eu plutôt du mal à trouver de la doc sur internet mais j'ai réussi à priori à générer un tableau à partir d'une suite d'entier séparés par des espaces : "Array.init len (fun _ -> Scanf.scanf "%d " (fun n -> n)" (bien que je n'ai pas testé) en regardant les codes des années précédentes.
Mais maintenant, j'aimerai créer une liste d'entiers, toujours à partir d'une suite d'entier séparé par des espaces. Pour cela, j'ai tenté d'utiliser cette fonction : "let rec lire_delta len = if len=0 then [] else (Scanf.scanf "%d " (fun x->x))::(lire_delta (len-1));;" mais j'ai une erreur.
Voici le code complet :
« let rec lire_delta len = if len=0 then [] else (Scanf.scanf "%d " (fun x->x))::(lire_delta (len-1));;
let len=read_int() in
vantardise (lire_delta len);; »
Et lorsque j'entre par exemple :
«2
1 3»
J'obtiens « Exception: Failure "int_of_string". »
Et sur d'autres tests j'obtiens « Exception:
Scanf.Scan_failure
"scanf: bad input at char number 10: ``character ';' is not a decimal digit''". » (Par exemple si je fais d'abord un
retour chariot avec d'écrire les nombres)
En espérant que vous pourrez m'aider,
Princeps.
P.S. : En fait j'ai le même genre d'erreurs pour générer un tableau.
Edit : Peut-être que le problème vient du fait que je fais mes tests sans compiler, dans un interpréteur.