Единица измерения F # для области модели - PullRequest
0 голосов
/ 23 сентября 2019

Как я могу использовать единицу измерения F # для моделирования области определенных геометрий.

Код, который у меня есть, таков, но он не совсем компилируется.

[<Measure>] type radius
[<Measure>] type PI
[<Measure>] type area

let convertRadiusToArea (r:float<radius>) : float<area>  =
    // let pi = System.Math.PI
    let a:float<PI> = 3.14<PI>
    r * r * System.Math.PI

Ответы [ 2 ]

4 голосов
/ 23 сентября 2019

Здесь есть несколько вещей:

  1. Вы должны определить площадь как длину квадрата с type area = radius * radius.В противном случае компилятор не сможет сопоставить ваши единицы ввода и вывода.

  2. Pi, при таком использовании, безразмерен, что представлено в F # как <1> или просто без суффикса единицы.

[<Measure>] type radius
[<Measure>] type area = radius * radius

let convertRadiusToArea (r:float<radius>) : float<area>  =
    let pi = System.Math.PI
    r * r * pi
2 голосов
/ 23 сентября 2019

Лучшим примером использования единицы измерения F # будет:

[<Measure>] type cm

let convertRadiusToArea(r:float<cm>) : float<cm^2> =
    r * r * System.Math.PI

Идея состоит в том, что вы получаете преимущества от единиц измерения в своих расчетах и ​​деривациях.Вы не получите этого, создав единицу измерения под названием «радиус».Это в метрах?Ножки?Сантиметры?И именно поэтому вы должны ввести их в функцию F #, чтобы не допускать двусмысленности относительно единицы измерения для входов и выходов.

Единицы измерения в F # должны быть смоделированы так, как мы используем единицы измеренияизмерение в любых других расчетах или на примере реального мира, таких как скорость, температура, сила и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...