2016-10-18 17 views
2

私はいくつかの種類のarbirary型とsom任意の長さの配列で構成する必要があるF#でモジュールを作成しようとしています。任意の配列を扱うF#

たとえば、私は任意の大きなベクトル計算のためのモジュールを作る必要があると言うことができます。

は、私の考えは

module Vector = 
type Vector = V of array<_> 
let (+) (v1:Vector) (v2:Vector) = Vector.map2 (+) V1 V2 

ですが、MAP2機能がまだベクトルに対してdeclaretされていないので、これは動作していない、それはだ私は同じで、新しいタイプのためMAP2機能を宣言するにはどうすればよい質問、 proberties広告アレイ?

答えて

4

配列のために関数map2がすでに存在するため、再利用することができます。

ただし、(+)にレットバインド機能を使用すると、そのタイプ内でのみアクセスできるようになるため、代わりに静的メンバーを使用する必要があります。その後

あなたは解除構成するあなたのシングルケースを判別-連合をするパターンマッチングを使用することができ、既存のmap2関数を呼び出す:

type Vector<'t> = V of array<'t> with 
    static member (+) (V v1, V v2) = V (Array.map2 (+) v1 v2) 

しかし、あなたはまだで、あなたのタイプのためのmap2関数を作成したい場合これをより一般的な方法で使用するには、次のようにしてください:

type Vector<'t> = V of array<'t> with 
    static member map2 f (V v1) (V v2) = V (Array.map2 f v1 v2) 
    static member (+) (v1, v2) = Vector<_>.map2 (+) v1 v2 
+0

私は任意の配列の扱いについて別の質問があります。私はタイプ "配列の配列"を持っている別のタイプを作成したいと思います 私はtestet array2Dを使用していました。 (シーケンスのシーケンス)内側の配列は同じ長さですが、私は自分で扱うことができるという性質を持っていなければなりません。しかし、私は型を宣言するときに配列の配列を示すための任意の方法を見つけることができません。 私は 上記のコメントを 型マトリクス配列> – kam

+0

SRYの= Mのようなものを試してみました私は、任意の配列の取り扱いについて別の質問を得ました。私は、 "配列の配列"型testet array2Dを持つ別の型を作成し、それが動作するのがもっと遅いことを知りたいと思います。 (シーケンスのシーケンス)しかし、型を宣言するときに、配列の配列を表すための任意の方法を見つけることはできません。 何か 等型マトリックスアレイ> 又は タイプマトリックスの= Mアレイ<'a,'b>(又は<'a><'b>)の<'a,'b> = M を試みたが、それはオールウェイズ単一次元アレイを折り返し。 – kam

+1

@kamあなたがあなたの質問を個別に投稿すると、あなたとコミュニティの方が良いと思います。あなたはより多くの可視性を得ることができますので、他の人が私よりも優れた解決策を持っている人にも答えることができます。 – Gustavo

関連する問題