【发布时间】:2010-09-11 13:22:27
【问题描述】:
我正在阅读 Andrew Kennedy 在units of measurement in F# 上的系列博文,在很多情况下这很有意义。有没有其他语言有这样的系统?
编辑:更清楚地说,我指的是灵活的计量单位系统,您可以在其中任意定义自己的单位。
【问题讨论】:
标签: programming-languages f# functional-programming
我正在阅读 Andrew Kennedy 在units of measurement in F# 上的系列博文,在很多情况下这很有意义。有没有其他语言有这样的系统?
编辑:更清楚地说,我指的是灵活的计量单位系统,您可以在其中任意定义自己的单位。
【问题讨论】:
标签: programming-languages f# functional-programming
TI-89 BASIC 算不算?输入54_kg * (_c^2),它会给你一个焦耳的答案。
除此之外,我不记得有任何语言内置了它,但是任何具有良好 OO 的语言都应该让你自己的语言变得简单。这意味着其他人可能已经这样做了。
谷歌确认。例如,here's one in Python。 __repr__ 可以轻松修改以选择最合适的派生单位等。
CPAN 有几个用于 Perl 的模块:Physics::Unit、Data::Dimensions、Class::Measure、Math::Units::PhysicalValue,以及其他一些可以转换但不会真正将值与单位结合起来的模块。
【讨论】:
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");
【讨论】:
我特别为 C# 中的单元制作了 QuantitySystem 库,但是它没有编译时检查
但我已经尝试让它按我想要的方式运行
它还支持扩展,因此您可以定义自己的独特单位
http://QuantitySystem.CodePlex.com
它还可以区分扭矩和功 :) [这对我很重要]
图书馆的方法是从维度到单位 到目前为止我所看到的只有单位接近。
【讨论】:
C++ 有它,形式为boost::units。
【讨论】:
我相信你可以通过小心猴子修补一些基础 -类。但在使用英制测量时,您可能会遇到问题。
【讨论】:
Nemerle 在 2006 年有经过编译器检查的计量单位。
http://nemerle.org/forum.old/viewtopic.php?t=265&view=previous&sid=00f48f33fafd3d49cc6a92350b77d554
【讨论】:
http://jcp.org/en/jsr/detail?id=275 上还有一个单位的 Java 规范,您已经可以从这里使用它http://jscience.org/
【讨论】:
F# 是第一个支持此功能的主流语言。
【讨论】:
我相信我看到Fortress支持这个,我看看能不能找到链接。
我找不到具体的链接,但语言规范在几个地方提到了它。 1.0 语言规范还说,尺寸和单位暂时从规范中删除(以及一大堆其他特性)以与当前实现相匹配。这是一项正在进行的工作,所以我猜事情在不断变化。
【讨论】:
我很确定艾达有它。
【讨论】:
我不确定这是否真的很重要,但我的 HP-48 计算器上的RPL 系统确实具有类似的功能。我可以写40_gal 5_l +,得到156.416升的正确答案。
【讨论】: