質問

> 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は、言語の他の部分を曖昧にする可能性があるため、廃止予定のフォームです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top