2017-09-22 2 views
1

Ce serait génial de pouvoir convertir automatiquement des unités de mesure, qui ne sont que des multiplicateurs de même dimension. (kg -> g, cm -> mm, km -> m). D'après ce que j'ai lu en ligne:Conversion automatique des unités de mesure en F # (kilomètres -> mètres)

https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/units-of-measure https://fsharpforfunandprofit.com/posts/units-of-measure/

Je ne semble pas possible d'avoir ce travail sans fonctions d'aide. De mon point de vue, ces conversions polluent les calculs. Je veux quelque chose comme ceci pour fonctionner:

[<Measure>] type m 
[<Measure>] type km = 1000 * m 

Le dessous ne fonctionnerait pas non plus.

let distance = 1000 * 10**3 <m> 

Est-ce réalisable d'une autre manière?

Répondre

1

Je ne connais pas F #, mais oui, les unités poluent les calculs. C'est pourquoi vous ne devez convertir les valeurs que lors de la saisie (par exemple en lisant le fichier/stdin), faire des calculs toujours dans les mêmes unités, le système métrique est ici. Puis, à la fin, convertissez le résultat du système métrique à l'unité que vous voulez.

De cette façon, il est très facile d'ajouter le support pour la nouvelle unité plus tard

+0

le problème vient quand vous « supposer » que tout est dans la même unité, mais à la fin il se trouve ne pas être le cas ... Les unités de mesure sont grandes, elles devraient être utilisées plus souvent – s952163

+1

Non, je veux que mon code soit lu en prose. F # est bon dans ce domaine. Dans ce problème particulier, je veux déclarer les entrées et les calculs sans conversions triviales inutiles. Comme je le ferais sur un bout de papier. – Pasho

+0

sur un morceau de papier, vous ne feriez pas cette chose à distance de votre question. Vous feriez de la vitesse = distance/temps et cela vous donne toujours la vitesse, mais dans différentes unités basées sur les unités de distance et de vitesse. Pour ma compréhension, F # fera exactement la même chose. Alors quel est ton problème? –