2010-11-20 15 views
2

RateOfChangeというメソッドがあり、1秒間隔で読み取られる2つの値を取り、結果を返します。二つの位置について測定単位 - 異なるユニットが再利用された再利用メソッド

、それは、2つの速度のために、速度を返し、それが2つのエネルギー値について、加速度を返すは、第2 /ジュールを返し等

これは物理的に可能であるが、測定の単位はできません。

let RateOfChangeWithTime (value1, value2) = (value2 - value1)/1.0<SI.s> 

let velocity = RateOfChangeWithTime(2.0<SI.m>, 1.0<SI.m>) 
let acceleration = RateOfChangeWithTime(3.0<SI.m/SI.s>, 2.0<SI.m/SI.s>) 

方法はもちろん、速度のための正しいfloat<SI.m> -> float<SI.m>/float<SI.s>、に拘束されるようになりvelocity =ラインが、ラインacceleration =を...:最初の使用上の方法は、指定した型にcontrainedされる - 私はそれを行いますを渡すとコンパイルに失敗しますこのメソッドは予期しないものです。

RateOfChangeWithTimeは、渡された型に不変であるが、ちょうど秒で割った小節の単位を返したいと思うだろう。

これは実際のライブ状況にさらにマッチするようですが、これは可能ですか? (私は、より複雑なシナリオのためにこれをやろうとしている - (http://taumuon-jabuka.blogspot.com/2010/11/f-units-of-measure-with-reactive.html

答えて

6
let RateOfChangeWithTime (value1: float<_>, value2: float<_>) = (value2 - value1)/1.0<SI.s> 

let velocity = RateOfChangeWithTime(2.0<SI.m>, 1.0<SI.m>) 
let acceleration = RateOfChangeWithTime(3.0<SI.m/SI.s>, 2.0<SI.m/SI.s>) 
+0

美しいここを参照してください、返信のために非常に多くのおかげで;-) –