これら2つのF#シーケンスの違いは何ですか?

f# syntax
> seq {0..3のiに対してfloat iを返す};;値は次のとおりです。seq = seq [0.0; 1.0; 2.0; [] 3.0;> seq [0..3のiに対して、float iが得られる];;値は次のとおりです。seq = [0.0; 1.0; 2.0; 3.0]

P.S なぜF#はもともと “seq”接頭辞のないシーケンスを期待していましたが、今はそれらは接頭辞が欲しいのですか?

  3  1


ベストアンサー

あなたが投稿した2つのフォームに関するより明確な説明:

最初のものは直接シーケンス内包表記 “seq \ {…​を使います。 ” “seq”部分は以前はオプションでしたが、将来サポートされる予定はありません。 “async \ {…​のようなものになると思います。 ワークフローの文法はもっと難しいか何か。

さて、2番目のものは純粋なリストです。

> x = [0..3のiに対してfloat iを与える];;とする。

val x:フロートリスト

“seq”も関数です。

> seq ;;値:(seq <'a>  - > seq <' a>)=

そしてどんなリストもシーケンスであるので、 “seq [1; 2; 3;]”を実行することは単にseq関数をリストに適用することです。 リスト型からseqにキャストするのと似ています。

> x ;; val it:float list = [0.0; 1.0; 2.0; 3.0]

> seq x ;;値は次のとおりです。seq = [0.0; 1.0; 2.0; 3.0]

編集:seq関数のソースは次のとおりです。

seq(x:seq <)> =(x:> seq <)

だから、「それをキャストするようなソルタ」は「ヘルパー関数を介してキャストする」と読むべきです。 角括弧内のシーケンスの印刷に関しては、これは単なるきれいな印刷成果物だと思います。

5


1つ目はseq(IEnumerable)です。

二つ目は変です。 「seq」を取り除くと、リスト内包表記(list)になります。 それをそのまま書く理由はありません。 seq \ {}または[]または[|を使用してください。 |] seq、リスト、または配列を作成します。

前置詞ではないカーリーは、言語の他の部分をあいまいにする可能性があるため、推奨されない形式です。

3


タイトルとURLをコピーしました