在F#中创建具有多个浮点数测量单位的列表

时间:2012-11-26 14:40:46

标签: list f# units-of-measurement

所以,我试图以各种方式解决这个问题,但我无法做到这一点。

有没有办法制作一个包含不同测量单位值的列表(全部基于浮点数)?例如:

let myList = [0.07<ms>; 0.9; 7.2<mm>;]

由于它们被视为不同类型,因此您无法将它们放在同一列表中。我尝试将列表声明为let myList : float<_> list = ...,并给出无量纲数字作为度量单位,但我仍然遇到输入错误:期望浮动&lt;'u&gt;但是浮起来了。

我无法使用元组/ n-ple,因为我不知道列表中的值的数量。

我对F#很陌生并花了很长时间在存储上搜索文档和网页,但还没有找到解决方案。如果有人能指出我正确的方向,我会非常感激。谢谢!

2 个答案:

答案 0 :(得分:4)

我认为您需要提供一个更长的示例,说明您希望如何使用此列表。否则很难给出一个好的答案,因为这取决于使用情况。

如果您只是想创建一个代表不同内容的数字列表,那么您可以考虑使用区别联合来区分它们:

type Numeric =
  | Length of float<mm>
  | Time of float<ms>
  | Unitless of float

let myList = [ Time 0.07<ms>; Unitless 0.9; Length 7.2<mm>;]

然后,您可以创建包含不同数字(具有不同物理意义)的列表。迭代列表时,您需要使用模式匹配来提取值。

或者,您可以在创建列表时删除所有单位,但之后您将失去计量单位提供的保证(这意味着当您从列表中获得某些值时,您将不知道它具有哪个单位而且您可能会错误地解释它:)

let myList = [ float 0.07<ms>; 0.9; float 7.2<mm>;]

您也可以使用an F# library that lets you track units at runtime

答案 1 :(得分:1)

列表must have the same type的所有成员。 float<ms>float<mm>不同。