Pourquoi vous n'avez jamais trouvé un moyen d'éviter d'utiliser les insupportables opérateurs float (+.),(-.),(/.),(*.) ?
Il y a une proposition pour résoudre ce problème, et offrir bien plus de possibilité, sous la forme de modules implicites. Il y a eu une discussion sur le sujet sur le forum OCaml, et il reste des questions tant théoriques que pratiques (au niveau de l'implémentation) à résoudre avant de voir apparaître le système dans le langage.
Pour faire simple, l'idée est de passer par des modules de premières classes et, dans le cas de ces opérateurs, de définir, disons, un type de module pour les corps :
Ici le corps à passer en paramètre est explicite et si on utilise l'alternative Batteries à la bibliothèque standard, on peut écrire :
add(moduleFloat)2.34.5;;-:float=6.8
L'idée étant de faire du module de première classe un paramètre implicite déterminé automatiquement par le compilateur en fonction du type des paramètres x et y. Ici comme ce sont des float, le compilateur cherchera dans son environnement au moment de l'appel à add un corps sur les float déclaré utilisable comme arguments implicites.
En attendant, si tu utilises Batteries tu peux écrire ton code sur les flottants via des open locaux :
[^] # Re: Ocaml et Float
Posté par kantien . En réponse au journal La recherche en langages de programmation au quotidien. Évalué à 3.
Il y a une proposition pour résoudre ce problème, et offrir bien plus de possibilité, sous la forme de modules implicites. Il y a eu une discussion sur le sujet sur le forum OCaml, et il reste des questions tant théoriques que pratiques (au niveau de l'implémentation) à résoudre avant de voir apparaître le système dans le langage.
Pour faire simple, l'idée est de passer par des modules de premières classes et, dans le cas de ces opérateurs, de définir, disons, un type de module pour les corps :
puis à définir, disons une fonction
add, qui opère sur n'importe quel corps et des valeurs du support du corps :Ici le corps à passer en paramètre est explicite et si on utilise l'alternative
Batteriesà la bibliothèque standard, on peut écrire :L'idée étant de faire du module de première classe un paramètre implicite déterminé automatiquement par le compilateur en fonction du type des paramètres
xety. Ici comme ce sont desfloat, le compilateur cherchera dans son environnement au moment de l'appel àaddun corps sur lesfloatdéclaré utilisable comme arguments implicites.En attendant, si tu utilises
Batteriestu peux écrire ton code sur les flottants via desopenlocaux :voir la définition du module
Float.Infix:Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.