Question

> 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]

P.S. pourquoi F # attendait-il à l'origine des séquences sans le signe "seq"? préfixe, mais maintenant ils veulent le préfixe?

Était-ce utile?

La solution

Plus de précisions sur les deux formulaires que vous avez publiés:

Le premier utilise une compréhension de séquence directe, "seq {...}". Le " seq " une partie était facultative auparavant, mais cela ne sera pas supporté à l'avenir. Je suppose que cela crée des choses comme "async {...}". et la syntaxe de flux de travail plus difficile ou quelque chose.

Maintenant, le second est une liste pure:

> let x = [ for i in 0..3 do yield float i ];;

val x : float list

" seq " est aussi une fonction:

> seq;;
val it : (seq<'a> -> seq<'a>) = <fun:clo@0_1>

Et comme toute liste est aussi une séquence, faire "seq [1; 2; 3;]" applique simplement la fonction seq à la liste. C'est un peu comme si on le séparait du type de liste.

> 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]

Éditer: la source de la fonction seq est:

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

Ainsi, "un peu comme si vous le diffusiez" devrait se lire "le lancer via une fonction d'assistance". En ce qui concerne l’impression de séquences entre crochets, je pense que c’est un bel artefact d’impression.

Autres conseils

Le premier est un seq (IEnumerable).

Le second est étrange; se débarrasser du 'seq' et c'est une liste de compréhension (liste). Il n'y a aucune raison de l'écrire tel quel; soit seq {} ou [] ou [| |] pour créer un seq, une liste ou un tableau.

Le curlies-not-prefixed-by-seq est un formulaire qui sera obsolète, car il rend certaines autres parties du langage potentiellement ambiguë.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top