Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

CAML : problème de syntaxe

Posté par
Equivalence
01-02-09 à 17:19

Bonjour,

j'ai un petit problème de syntaxe sous caml :

Citation :

let rec evaluer_chaine (l: string) =
let c = simplif l in
let n = string_length c in
begin
match l with
| "a+b" -> (int_of_char `a`) + (int_of_char `b`);
| "a*b" -> (int_of_char `a`) * (int_of_char `b`);
|_ ->
if l.[oper c] = `*` then (evaluer_chaine (sub_string c 0 (oper c))) * (evaluer_chaine (sub_string c (oper c + 1) (n-1)))
else if l.[oper c] = `+` then (evaluer_chaine (sub_string c 0 (oper c)) + (evaluer_chaine (sub_string c (oper c) (n-1)))
;;

où la fonction simplif est définie avant et oper la position du premier opérateur non compris entre deux parenthèses qui se correspondent.
Pourriez-vous m'indiquer où est l'erreur svp car je ne trouve pas ...

Posté par
Equivalence
re : CAML : problème de syntaxe 01-02-09 à 18:32

Posté par
Equivalence
re : CAML : problème de syntaxe 01-02-09 à 18:37

J'ai tout changé, et ça semble marcher mais ça ne respecte pas les priorités dans les opérations... que faire?

Merci d'avance pour toute aide

E.

Posté par
Equivalence
re : CAML : problème de syntaxe 01-02-09 à 22:28

Posté par
Fractal
re : CAML : problème de syntaxe 12-02-09 à 23:52

Bonjour

Citation :
match l with
| "a+b" -> (int_of_char `a`) + (int_of_char `b`);
| "a*b" -> (int_of_char `a`) * (int_of_char `b`);

Le pattern matching ne fonctionne absolument pas comme ça, il permet de «matcher» en fonction de la structure abstraite d'un type, par exemple si une liste est vide ou non. Une chaîne de caractères restera toujours une chaîne de caractères, donc il est absolument impossible de faire un tel pattern matching (le premier motif reconnaîtra uniquement la chaîne de 3 caractères "a+b")

Sinon, effectivement, pour le reste il ne respecte pas les priorités. Tu pourrais par exemple essayer de faire en sorte que ta fonction "oper" renvoie en priorité la position du signe + si des additions et des multiplications sont faites au même niveau.

Fractal



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !