Ocaml _ Problème avec le type
Résolu
CrazyGeekMan
Messages postés
873
Date d'inscription
Statut
Membre
Dernière intervention
-
CrazyGeekMan Messages postés 873 Date d'inscription Statut Membre Dernière intervention -
CrazyGeekMan Messages postés 873 Date d'inscription Statut Membre Dernière intervention -
Bonsoir,
Avant de poser ma question j'ai essayé de trouver la réponse par moi même mais je n'arrive pas :/
Mon but était tout simple : créer une fonction qui affiche la valeur absolue de x entré dans le code source.
Ainsi ce code fonctionne :
Mais dès que je rajoute une valeur négative il y a l'erreur
File "Ex_2.ml", line 2, characters 12-21:
Error: This expression has type int -> unit
but an expression was expected of type int
Même chose avec ce code :
File "Ex_2.ml", line 5, characters 0-7:
Error: This expression has type int -> unit
but an expression was expected of type int
C'est donc bien dû au - mais pourtant -2 reste toujours un entier...
Si quelqu'un pourrait m'aider ce serait super sympa ;)
Merci et bonne soirée!
Avant de poser ma question j'ai essayé de trouver la réponse par moi même mais je n'arrive pas :/
Mon but était tout simple : créer une fonction qui affiche la valeur absolue de x entré dans le code source.
Ainsi ce code fonctionne :
let val_abs x =
if x<0 then print_int x
else print_int x;;
print_newline();;
val_abs 2;;
Mais dès que je rajoute une valeur négative il y a l'erreur
File "Ex_2.ml", line 2, characters 12-21:
Error: This expression has type int -> unit
but an expression was expected of type int
let val_abs x =
if x<0 then print_int -x
else print_int x;;
print_newline();;
val_abs 2;;
Même chose avec ce code :
File "Ex_2.ml", line 5, characters 0-7:
Error: This expression has type int -> unit
but an expression was expected of type int
let val_abs x =
if x<0 then print_int x
else print_int x;;
print_newline();;
val_abs -2;;
C'est donc bien dû au - mais pourtant -2 reste toujours un entier...
Si quelqu'un pourrait m'aider ce serait super sympa ;)
Merci et bonne soirée!
A voir également:
- Valeur absolue ocaml
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Valeur ascii - Guide
- Formule excel si contient texte alors valeur ✓ - Forum Excel
- Valeur relative et absolue - Forum Programmation
- Faites afficher avec un fond coloré les cellules qui contiennent une valeur comprise entre 250 et 350. quel nombre est dessiné en surbrillance ? ✓ - Forum Excel
1 réponse
Bonjour,
Le problème c'est la priorité de l'opérateur
Cela se règle avec des parenthèses.
Remarque : la valeur absolue est une fonction de calcul d'un entier qui donne un autre entier, tu ne devrais donc pas faire l'affichage dans cette fonction, mais plutôt afficher le résultat de la fonction.
Le problème c'est la priorité de l'opérateur
-qui fait que Caml tente de soustraire x à print_int (ce qui n'a pas de sens).
Cela se règle avec des parenthèses.
let val_abs x =
if x<0 then print_int (-x)
else print_int x;;
val_abs (-5);;
Remarque : la valeur absolue est une fonction de calcul d'un entier qui donne un autre entier, tu ne devrais donc pas faire l'affichage dans cette fonction, mais plutôt afficher le résultat de la fonction.
let val_abs x =
if x<0 then -x
else x;;
val_abs (-5);;
let print_abs x =
print_int (val_abs x);;
print_abs (-5);;
Je me permet de corriger cette petite coquille :)
Bon je pensais que le programme comprendrais que quand j'écris -x alors ça équivaut à -1*x ; ça marche dans le second cas.
Merci !
Si tu parles du en en réalité c'est inutile.
La priorité de avec le then est différente car c'est un mot clé du langage, donc Caml sait que tu ne peux pas faire de soustraction de then, contrairement à print_int qui est une fonction.
Merci pour ces explications !
--