F#度量单位到模型区域

时间:2019-09-23 13:54:20

标签: f#

如何使用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 个答案:

答案 0 :(得分:3)

这里有几件事:

  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

答案 1 :(得分:2)

使用F#的计量单位的一个更好的例子是:

[<Measure>] type cm

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

这样的想法是,您可以在计算和推导中获得计量单位的好处。您不能通过创建一个称为“半径”的度量单位来实现这一目标。以米为单位吗?脚?厘米?这就是为什么要将它们引入F#函数的原因,以使输入和输出的度量单位无歧义。

F#中的度量单位应该以任何其他计算方式或速度,温度,力等实际示例中使用度量单位的方式为IMO建模