[ocaml] erreur de syntax oui, mais où ?
dead brain
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Salut !
J'ai attaqué le ocaml ce matin et je me retrouve face à pas mal d'erreur de syntaxe.
Sans doute de grosses bourde de débutant qui connait pas les subtilité du langage mais ça tombe bien ! c'est mon cas !
Bref, je vous explique le principe :
Dans une boucle, je demande au user de rentrer une valeur, j'ajoute cette dernière dans une liste et je fais la moyenne des données présentes dans la liste.
Le code :
Les erreurs semblent être liées aux lignes
et
Le retour du compilateur :
mais sincèrement, étant tout frais la dedans, j'ai pas le recul pour comprendre.
Merci d'avance !
J'ai attaqué le ocaml ce matin et je me retrouve face à pas mal d'erreur de syntaxe.
Sans doute de grosses bourde de débutant qui connait pas les subtilité du langage mais ça tombe bien ! c'est mon cas !
Bref, je vous explique le principe :
Dans une boucle, je demande au user de rentrer une valeur, j'ajoute cette dernière dans une liste et je fais la moyenne des données présentes dans la liste.
Le code :
let rec longeur ls =
match ls with
| [] -> 0
| head :: queue -> 1 + longeur queue ;;
let rec somme ls =
match ls with
| [] -> 0
| head :: queue -> head + somme queue;;
let moyenne ls = float_of_int (somme ls) /. float_of_int (longeur ls) ;;
let main x =
let tab = []
let intern_loop() =
let nbr = get_user_input in
tab := nbr :: tab
moyenne tab
in intern_loop() ;;
Les erreurs semblent être liées aux lignes
let tab = [] ;
et
nbr :: tab (* ajout dans le tableau *)
Le retour du compilateur :
$ ocamlc typestat.ml
$ ocamlc typestat.ml
File "typestat.ml", line 15, characters 4-7:
Error: Syntax error
mais sincèrement, étant tout frais la dedans, j'ai pas le recul pour comprendre.
Merci d'avance !
1 réponse
-
Bonjour,
Ligne 15 (comme indiqué par le compilateur) il te manque unin
pour déclarer (let) une variable à l'intérieur d'une déclaration (let) de la fonction.
let tab = [] in
Mais clairement l'imbrication de fonctions doit être éviter, donc découpes ton main pour en sortir intern_loop.-
Bon, suite a tes recommandations, j'ai fait des modifs, et une chose est sûre : je maitrise pas les scopes ^^'
let rec longeur ls =
match ls with
| [] -> 0
| head :: queue -> 1 + longeur queue ;;
let rec somme ls =
match ls with
| [] -> 0
| head :: queue -> head + somme queue;;
let moyenne ls = float_of_int(somme ls) /. float_of_int(longeur ls) ;;
let rec infinite_loop tableau =
moyenne tableau ;;
let nbr = read_int() in
infinite_loop (nbr :: tableau)
let main x =
let values = [] in
infinite_loop values ;;
amène des erreur unbound values.File "typestat.ml", line 16, characters 31-38:
Error: Unbound value tableau
alors que tableau est fourni en argument ...
qu'on soit clair : il y a aussi des problèmes d'algo, plein. mais ça, je verrais par moi même, ici le but c'est de comprendre mes erreurs de syntaxe. -
-