F# の測定単位に関する Andrew Kennedy のブログ投稿シリーズを読んでいましたが、多くの場合、それは非常に理にかなっています。このようなシステムを持つ言語は他にありますか?
編集:より明確にするために、私はあなたが任意に定義できる測定システムの柔軟な単位を意味します。
F# の測定単位に関する Andrew Kennedy のブログ投稿シリーズを読んでいましたが、多くの場合、それは非常に理にかなっています。このようなシステムを持つ言語は他にありますか?
編集:より明確にするために、私はあなたが任意に定義できる測定システムの柔軟な単位を意味します。
TI-89 BASIC はカウントされますか? と入力54_kg * (_c^2)
すると、ジュール単位で答えが返ってきます。
それ以外に、それが組み込まれている言語を思い出すことはできませんが、適切な OO を備えた言語であれば、独自の言語を簡単に作成できるはずです。これは、おそらく他の誰かがすでに行っていることを意味します。
Googleは確認します。たとえば、これは Python のものです。 __repr__
最も適切な派生単位などを選択するように簡単に修正できます。
CPAN には Perl 用のモジュールがいくつかあります: Physics::Unit、Data::Dimensions、Class::Measure、Math::Units::PhysicalValue、および変換はするが実際には値を単位と結合しないいくつかのモジュール。
C++ には、boost::unitsの形式でそれがあります。
Nemerle は、2006 年にコンパイラによってチェックされた測定単位を持っていました。
http://nemerle.org/forum.old/viewtopic.php?t=265&view=previous&sid=00f48f33fafd3d49cc6a92350b77d554
これが本当に重要かどうかはわかりませんがRPL
、HP-48 電卓のシステムには同様の機能があります。私は40_gal 5_l +
、156.416 リットルの正しい答えを書くことができます。
Fortressがこれをサポートしているのを見たと思います。リンクを見つけられるかどうかを確認します。
特定のリンクは見つかりませんが、言語仕様ではいくつかの場所で言及されています。1.0 言語仕様では、現在の実装と一致させるために、ディメンションと単位が (他の機能の山全体と共に) 一時的に仕様から削除されたと述べています。進行中の作業なので、状況は流動的だと思います。
F# は、この機能をサポートする最初の主流言語です。
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");
http://jcp.org/en/jsr/detail?id=275には単位の Java 仕様もあり、ここから既に使用できますhttp://jscience.org/
特にC#のユニット用にQuantitySystemライブラリを作成しましたが、コンパイル時のチェックは行われません。
しかし、私はそれを私が望むように実行させようとしました
また、拡張をサポートしているため、独自のユニットを定義できます
http://QuantitySystem.CodePlex.com
また、トルクと仕事を区別することができます:)[これは私にとって重要でした]
ライブラリのアプローチは、ディメンションからユニットまでです。これまでに見たすべてのユニットは、ユニットのみのアプローチです。
私はエイダがそれを持っていると確信しています。
ほとんどの動的言語 (javascript、python、ruby)で、いくつかの基本クラスに慎重にモンキー パッチを適用することで、これを実行できると確信しています。ただし、帝国単位で作業する場合、問題が発生する可能性があります。