4
我將一些Haskell代碼移植到F#,但對F#中的可用集合和它們的簽名有點困惑。我的理解是列表中的元素包含在[]之間,{}之間的序列和[|之間的數組之間|]。在F#Interactive中,當我使用5個整數創建每個容器時,我會得到以下結果。F#中的列表和[]中的區別#
// 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|]
令我困惑的是數組的類型簽名是int []
。可能是類型int array
或int [||]
會更少混淆?查看類型簽名,我傾向於認爲它是一個列表,特別是因爲空列表也被表示爲[]。
這裏有一個問題:爲什麼是序列類型seq<int>
而不是int seq
。我假設這可能是語法糖,但可能是在這個背後有其他東西。
type T1 = T1 of int list
type T2 = T2 of int seq // becomes type T2 = T2 of seq<int>
type T3 = T3 of int array
type T4 = T4 of int []
是T3和T4同樣的事情:
現在使用集合創建新的類型?
有些瑣事:F#中的類型int [] [,]與C#中的類型int [,] []類型相同,但交換了尺寸。這是爲了與F#中的其他後綴類型名稱(如int list list)保持一致。 – gradbot 2012-03-13 02:06:55
你可能也會覺得這很有趣。 http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx – gradbot 2012-03-13 02:35:34