List 在F#中的结构中列出?

List 在F#中的结构中列出?,list,data-structures,f#,struct,List,Data Structures,F#,Struct,我对F#非常陌生,我正在尝试制作一个用于存储多边形的结构,它必须包含一个坐标列表: type Polygon = struct val Coords : list new(list_of_Coords) = { Coords = list_of_Coords } end 但是VisualStudio说“类型'Microsoft.FSharp.Collections.list'需要1个类型参数,但被指定为0” 我认为不是因为我不打算在结构中初始化列

我对F#非常陌生,我正在尝试制作一个用于存储多边形的结构,它必须包含一个坐标列表:

type Polygon =
    struct
        val Coords : list
        new(list_of_Coords) = { Coords = list_of_Coords }
    end
但是VisualStudio说“类型'Microsoft.FSharp.Collections.list'需要1个类型参数,但被指定为0”

我认为不是因为我不打算在结构中初始化列表,而是声明它。

请参见

我想知道答案

(此处重复:

您需要指定列表的类型,例如列表

类型多边形=
结构
val Coords:列表
新的(合作伙伴列表)={Coords=合作伙伴列表}
结束
)

请参见

我想知道答案

(此处重复:

您需要指定列表的类型,例如列表

类型多边形=
结构
val Coords:列表
新的(合作伙伴列表)={Coords=合作伙伴列表}
结束

)除了布赖恩的回答之外: 如果事先不知道坐标的类型,也可以将结构设置为通用结构(即使
字符串多边形
没有多大意义)

通常,您可以这样声明一个记录类型(假设您有一个
Coord
类型)


除了Brian的anwer: 如果事先不知道坐标的类型,也可以将结构设置为通用结构(即使
字符串多边形
没有多大意义)

通常,您可以这样声明一个记录类型(假设您有一个
Coord
类型)


对于要生成为float as int和其他类型多边形的情况,可以使用以下代码:

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];}
类型多边形
新的(合作伙伴列表)={Coords=合作伙伴列表}
结束
让我们来看看多边形(a:'列表)=

新多边形对于要生成为浮点为int和其他类型多边形的情况,可以使用以下代码:

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];}
类型多边形
新的(合作伙伴列表)={Coords=合作伙伴列表}
结束
让我们来看看多边形(a:'列表)=

关于“let myPolygon={Coords=[…]}”语法:然后我可以输入这样的内容:“let myPolygon={Coords=[[1,2.],[3,4.]}”,还是必须先定义所有的Coords?(我猜是后者,因为我做前者失败了)结构是不可变的,您必须在初始化中指定所有坐标=>
let myPolygon={coords=[(1,2.);(3,4.)]}
关于“let myPolygon={coords=[…]}”语法:然后我可以输入这样的内容:“let myPolygon={coords=[[1,2.],[3,4.]}“还是我必须先定义所有的坐标?(我猜是后者,因为我没有做前者)结构是不可变的,你必须在初始化中指定所有坐标=>
let myPolygon={coords=[(1,2.);(3,4.)]}
let inline genPolygon(a:'a list)=新的多边形的效果,我想,人们更喜欢使用“genPoly[1;2;3]”而不是“新的多边形[1;2;3]“。似乎您希望使用经典的ML类型,而不是结构。我不知道如何设置评论的格式,所以请看下一个答案:“让内联genPolygon(a:'a list)=新多边形的效果,我想人们更喜欢使用”genPoly[1;2;3]“而不是”新多边形[1;2;3]“。似乎您希望使用经典的ML类型,而不是结构。我不知道如何设置注释的格式,所以请参见下一个答案:如果我想确保多边形只使用浮点数,为什么我不能这样写:键入HeightCurve={coords:list};;设myHeightCurve={coords=[[1.;2.];[1.;2.]};;当然可以。只要在你的例子中使用“typeheightcurve={coords:float list}”,如果我想确保多边形只使用float,为什么我不能这样写:typeheightcurve={coords:list};;设myHeightCurve={coords=[[1.;2.];[1.;2.]};;当然可以。只需在您的案例中使用“type HeightCurve={coords:float list}”。
type Polygon = { Coords : Coord list }

// Code ...

let myPolygon = { Coords = [ ... ] }
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];}
> 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