F#的测量单位是否独一无二?

时间:2008-09-20 05:31:24

标签: programming-languages f# functional-programming

我在units of measurement in F#上阅读了Andrew Kennedy的博客文章系列,在很多情况下它很有意义。还有其他语言有这样的系统吗?

编辑:更清楚一点,我指的是灵活的测量单位,您可以随意定义自己的测量系统。

11 个答案:

答案 0 :(得分:10)

TI-89 BASIC是否计算在内?输入54_kg * (_c^2),它将以焦耳为您提供答案。

除此之外,我不记得任何内置它的语言,但任何具有体面OO的语言都应该让你自己动手。这意味着其他人可能已经做过了。

谷歌证实了这一点。例如,here's one in Python。可以很容易地修改__repr__以选择最合适的派生单位等。

CPAN为Perl提供了几个模块:Physics::UnitData::DimensionsClass::MeasureMath::Units::PhysicalValue以及其他一些将转换但不真正将值与单元。

答案 1 :(得分:6)

答案 2 :(得分:6)

C ++以boost::units的形式拥有它。

答案 3 :(得分:3)

我不确定这是否真的很重要,但HP-48计算器上的RPL系统确实具有相似的功能。我可以写40_gal 5_l +并得到156.416升的正确答案。

答案 4 :(得分:3)

我相信我看到Fortress支持这一点,我会看看能否找到链接。

我找不到具体的链接,但语言规范在几个地方提到了它。 1.0语言规范还说,维度和单位暂时从规范中删除(以及一大堆其他功能)以匹配当前的实现。这是一项正在进行中的工作,所以我觉得事情在不断变化。

答案 5 :(得分:2)

F#是支持此功能的第一种主流语言。

答案 6 :(得分:2)

http://jcp.org/en/jsr/detail?id=275的单位还有一个Java规范,你可以在这里使用http://jscience.org/

答案 7 :(得分:2)

Nemerle有比F#更好的东西!

你应该检查一下:http://rsdn.ru/forum/src/1823225.flat.aspx#1823225

真的很棒。 你可以在这里下载:http://rsdn.ru/File/27948/Oyster.Units.0.06.zip

一些例子:

def m3 = 1 g;
def m4 = Si.Mass(m1);

WriteLine($"Mass in SI: $m4, in CGS: $m3");

def x1 = Si.Area(1 cm * 10 m);

WriteLine($"Area of 1 cm * 10 m = $x1 m");

答案 8 :(得分:1)

我特别为C#中的单位创建了QuantitySystem库,但它不是编译时检查

但我试图让它按照我想要的方式运行

它也支持扩展,因此您可以定义您的唯一单位

http://QuantitySystem.CodePlex.com

它也可以区分Torque和Work :) [这对我很重要]

库方法是从Dimension到单位 到目前为止我所看到的只是单位接近。

答案 9 :(得分:0)

我很确定阿达有它。

答案 10 :(得分:0)

我确信你能够通过 仔细 对大多数动态语言(javascript,python,ruby)执行此操作 猴子修补一些基础 - 类。在使用英制测量时,您可能会遇到问题。