私はいくつかのハスケルコードを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 [||]
の方が混乱は少ないでしょうか?型シグネチャを見ると、それはリストであると思う傾向があります。特に、空のリストも[]として表されるためです。
ここで1つの質問: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 [、] []型と同じです。これは、int list listのようなF#の他の接尾辞型名との一貫性のためです。 – gradbot
また、これは興味深いかもしれません。 http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx – gradbot