質問
> seq { for i in 0..3 do yield float i };;
val it : seq<float> = seq [0.0; 1.0; 2.0; 3.0]
> seq [ for i in 0..3 do yield float i ];;
val it : seq<float> = [0.0; 1.0; 2.0; 3.0]
PS F#が元々&quot; seq&quot;のないシーケンスを期待していた理由接頭辞、しかし今彼らは接頭辞が欲しいですか?
解決
投稿した2つのフォームの詳細:
最初のものは、直接シーケンス内包表記、「seq {...}」を使用します。 &quot; seq&quot;一部は以前はオプションでしたが、将来サポートされる予定はありません。 &quot; async {...}&quot;のようなものになると思います。ワークフローの構文がより難しいか何か。
今、2番目のものは純粋なリストです:
> let x = [ for i in 0..3 do yield float i ];;
val x : float list
&quot; seq&quot;関数でもあります:
> seq;;
val it : (seq<'a> -> seq<'a>) = <fun:clo@0_1>
リストはシーケンスでもあるため、&quot; seq [1; 2; 3;]&quot;リストにseq関数を適用するだけです。リスト型からseqにキャストするようなものです。
> x;;
val it : float list = [0.0; 1.0; 2.0; 3.0]
> seq x;;
val it : seq<float> = [0.0; 1.0; 2.0; 3.0]
編集:seq関数のソースは次のとおりです。
let seq (x : seq<_>) = (x :> seq<_>)
つまり、「キャストのようなもの」 「ヘルパー関数を介してキャストする」を読んでください。括弧内のシーケンスの印刷に関しては、かなりきれいな印刷物だと思います。
他のヒント
最初はseq(IEnumerable)です。
2番目は奇妙です。 'seq'を取り除くと、それはリスト内包表記(リスト)です。そのまま書く理由はありません。 seq {}または[]または[| |] seq、リスト、または配列を作成します。
curlies-not-prefixed-by-seqは、言語の他の部分を曖昧にする可能性があるため、廃止予定のフォームです。
所属していません StackOverflow