1

それで、私はこれをさまざまな方法で回避しようとしましたが、私はこれを機能させることができません。

さまざまな測定単位(すべてフロートに基づく)の値を含むリストを作成する方法はありますか?例えば:

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

それらは異なるタイプとして扱われるため、同じリストに入れることはできません。リストをとして宣言し、let myList : float<_> list = ...無次元数に測定単位を指定しようとしましたが、それでも入力エラーが発生しました。float<'u>を期待していますが、floatを取得しました。

リストに含まれる値の数がわからないため、タプル/n-pleを使用できません。

私はF#を初めて使用し、ストレージ上のドキュメントとWebを精査するのにかなりの時間を費やしましたが、解決策が見つかりませんでした。誰かが私を正しい方向に向けることができれば、私はそれを本当に感謝します。ありがとうございました!

4

2 に答える 2

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>;]

実行時にユニットを追跡できるF#ライブラリを使用することもできます。

于 2012-11-26T15:17:44.043 に答える
1

リストのすべてのメンバーは同じタイプである必要があります。Afloat<ms>は。と同じではありませんfloat<mm>

于 2012-11-26T15:01:22.257 に答える