Collections F中列表和[]之间的差异#

Collections F中列表和[]之间的差异#,collections,types,f#,f#-interactive,Collections,Types,F#,F# Interactive,我正在将一些Haskell代码移植到F#,但对可用的集合及其在F#中的签名有点困惑。我的理解是,列表中的元素在[]之间、序列在{}之间、数组在[||]之间。在F#Interactive中,当我创建每个包含5个int的容器时,我会得到以下结果 // List > [1..5] val it : int list = [1; 2; 3; 4; 5] // Seq > {1..5} val it : seq<int> = seq [1; 2; 3; 4; ...] // A

我正在将一些Haskell代码移植到F#,但对可用的集合及其在F#中的签名有点困惑。我的理解是,列表中的元素在[]之间、序列在{}之间、数组在[||]之间。在F#Interactive中,当我创建每个包含5个int的容器时,我会得到以下结果

// List
> [1..5]
val it : int list = [1; 2; 3; 4; 5]

// Seq
> {1..5}
val it : seq<int> = seq [1; 2; 3; 4; ...]

// Array
> [|1..5|]
val it : int [] = [|1; 2; 3; 4; 5|]
T3和T4是一回事吗?

F#允许您使用.Net样式类型定义和ocaml样式类型定义。这些都是一样的

int list
list<int>  

int seq
seq<int>

int array
array<int>
在类型定义中,还可以执行
int[]
。这是C的语法。是的,T3和T4是一样的

int list
list<int>  

int seq
seq<int>

int array
array<int>

但是,您不能执行此操作
[]
<代码>[]有点奇怪,因为它在类型定义中充当类型数组,在表达式中充当op#Nil。

一些琐事:F#中的int[][,]类型与C#中的int[,][]类型相同,尽管维度是交换的。这是为了与F#中的其他后缀类型名称(如int list)保持一致。您可能也会发现这很有趣。
[||] is an array
[] is a list
{} is a sequence