Я изучаю F # и сейчас изучаю единицы измерения. У меня есть простой расчет, возвращающий метры в секунду, и я хочу представить функцию, конвертирующую его в километры в час.
Мой код выглядит так:
[<Measure>] type kg
[<Measure>] type s
[<Measure>] type m
[<Measure>] type km
[<Measure>] type h
let msToKmph(speed : float<m/s>) =
(float speed) * 3.6<km/h>
let gravityOnEarth = 9.81<m/s^2>
let heightOfJump = 3.5<m>
let speedOfImpact = sqrt (2.0 * gravityOnEarth * heightOfJump)
let speedOfImpactKmh = msToKmph(speedOfImpact)
Это работает - я получаю 8,28673639 м / с и 29,832251 км / ч. В чем я не уверен, так это в том, что это лучший способ выразить отношения между разными единицами. Можно ли это сделать изящнее?
Например, строка делает (скорость с плавающей запятой), чтобы удалить информацию о единицах измерения из параметра скорости, чтобы вернуть msToKmph в км / ч. Если бы я не удалил информацию о единицах измерения перед выполнением вычислений, возвращенная единица измерения была бы: км м / (ч с)
let mToKm(length: float<m>) = length * 0.001<km/m>
), а затем построил бы другие преобразования на основе этих простых. - person Damien_The_Unbeliever   schedule 11.12.2012