如何使用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
答案 0 :(得分:3)
这里有几件事:
您需要使用type area = radius * radius
将区域定义为正方形长度。否则,编译器将无法匹配您的输入和输出单位。
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建模