Pregunta

> 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. ¿Por qué F # originalmente esperaba secuencias sin el " seq " prefijo, pero ahora quieren el prefijo?

¿Fue útil?

Solución

Más aclaraciones sobre los dos formularios que publicó:

El primero utiliza una comprensión de secuencia directa, " seq {...} " El " seq " La parte era opcional antes, pero eso no será compatible en el futuro. Supongo que hace cosas como " async {...} " y la sintaxis del flujo de trabajo es más difícil o algo así.

Ahora, el segundo es una lista pura:

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

val x : float list

" seq " También es una función:

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

Y dado que cualquier lista es también una secuencia, hacer "seq [1; 2; 3;] " solo está aplicando la función seq a la lista. Es algo así como lanzarlo a seg. Del tipo de lista.

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

Editar: la fuente de la función seq es:

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

Por lo tanto, " a sorta le gusta lanzarlo " debería leer "lanzarlo a través de una función auxiliar". En cuanto a la impresión de secuencias entre paréntesis, creo que es solo un bonito artefacto de impresión.

Otros consejos

El primero es un seq (IEnumerable).

El segundo es raro; deshacerse del 'seq' y es una lista de comprensión (lista). No hay razón para escribirlo como es; use seq {} o [] o [| |] para hacer una secuencia o una lista o una matriz.

Los curlies-not-prefixed-by-seq es una forma que quedará en desuso, ya que hace que otras partes del lenguaje sean potencialmente ambiguas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top