2009-07-23 14 views
1

私はF#に非常に新しいだと私はポリゴンを格納するための構造体を作るためにしようとしている、そしてそれは座標のリストが含まれていますはF#の構造体にリストされていますか?

type Polygon = 
    struct 
     val Coords : list 
     new(list_of_Coords) = { Coords = list_of_Coords } 
    end 

が、Visual Studioは、「タイプ「と言っMicrosoft.FSharp .Collections.list < _> '1つの型引数が必要ですが、0が与えられます。

私は構造体のリストを初期化するつもりはないと思います。

答えて

4

は答えを

http://cs.hubfs.net/forums/thread/11377.aspx

を参照してください。

は(ここでは繰り返さ:

をあなたがリストのタイプを指定する必要があり、例えばリストは<フロート>

type Polygon = 
    struct 
     val Coords : list<float> 
     new(list_of_Coords) = { Coords = list_of_Coords } 
    end 

。)

5

ブライアンのanwerに加えて: あなたがまたすることができます事前に座標の型がわからない場合は構造体が汎用です(たとえstring Polygonが意味をなさない場合でも)

type 'a Polygon = 
    struct 
     val Coords : 'a list 
     new(list_of_Coords) = { Coords = list_of_Coords } 
    end 

一般的に、あなたは以下のコードを使用することができ、(あなたがCoordタイプを持っていると仮定)このようにあなたがintや他のタイプのポリゴンとしてfloatとして生成したい場合のために

type Polygon = { Coords : Coord list } 

// Code ... 

let myPolygon = { Coords = [ ... ] } 
+0

"聞かせてmyPolygonは= {COORDS = [...]}" 構文について: 「myPolygon = {COORDS = [[1、2を聞かせて: 私は、このような何かを入力することができます。 ]、 [3.、4.。]]} " または私はすべての指を最初に定義しなければなりませんか? (私は前者をやっていないので、後者を推測します) – loldrup

+0

構造体は不変なので、初期化ですべての座標を指定する必要があります=> 'let myPolygon = {Coords = [(1.、2.); (3、4)]} ' – Dario

0

をレコード型を宣言することができます。

type Polygon<'a> = 
    struct 
     val Coords : list <'a> 
     new(list_of_Coords) = { Coords = list_of_Coords } 
    end 

let inline genPolygon (a: 'a list) = 
    new Polygon<'a> (a) 

> genPolygon [1;2;3];; 
val it : Polygon<int> = FSI_0002+Polygon`1[System.Int32] {Coords = [1; 2; 3];} 
> genPolygon [1.0;2.0;3.0];; 
val it : Polygon<float> 
= FSI_0002+Polygon`1[System.Double] {Coords = [1.0; 2.0; 3.0];} 
+0

の効果「 インラインgenPolygonせ(「リスト)= 新たなポリゴンを<'a>(A) 」 だけポリゴンタイプのコンストラクタを使用することを避けるためであります直接? ポリゴンを最初に明示的に宣言しなくても、ポリゴンを作ることができるのはもっと興味があります。私。次のように書く: let myPolygon = {Coords = [[1.2. 2]] [3.,4。]} – loldrup

+0

はい、人は "genPoly [1; 2; 3]"を使いたいと思う"新しいポリゴン [1; 2; 3]"。構造体ではなく、古典的なML型を使いたいと思うようです。コメントの書式を設定する方法がわからないので、次の回答を参照してください。 – ssp

0
> type 'a F = { coords: 'a list };; 

type 'a F = 
    {coords: 'a list;} 

> let dd = {coords=[1.;2.]};; 

val dd : float F 

> let dd = {coords=[[1.;2.];[1.;2.]]};; 

val dd : float list F 
+0

ポリゴンに浮動小数点しか使用しないようにするにはどうすればいいですか? HeightCurve = {coords:list } ;; myHeightCurve = {coords = [[1.; 2.。]; [1.; 2.]]} ;; – loldrup

+0

もちろん、これを行うことができます。あなたのケースでは "type HeightCurve = {coords:float list list}"を使用してください。 – ssp

関連する問題