2009-10-02 9 views
9

Descargo de responsabilidad:Total F # ¡Pregunta de novato!F # - Muestra los resultados completos en la ventana interactiva F #

Si escribo lo siguiente en un archivo de F # en Visual Studio

#light 

let squares = 
    seq { for x in 1 .. 10 -> x * x } 

printf "%A" squares 

y ejecutar F # interactiva en él, poniendo de relieve y presionando Alt + Introduzca, la salida en la ventana interactiva es

> 
seq [1; 4; 9; 16; ...] 
val squares : seq<int> 

> 

Pero quiero ver la secuencia completa, es decir

> 
seq [1; 4; 9; 16; 25; 36; 49; 64; 81; 100] 
val squares : seq<int> 

> 

¿Esto es posible? Espero que haya una configuración para esto que me he perdido.

Respuesta

9

'seq' es una construcción evaluada con holgazanería; podría ser infinito, por lo que FSI solo muestra los primeros valores. Si quiere verlo todo, una cosa fácil de hacer es convertirlo en una lista, p.

printf "%A" (squares |> Seq.tolist) 
+0

Gracias Brian, eso tiene mucho sentido ahora. ¿Es posible pedirle a FSI que evalúe todos los valores en el rango de comprensión seq (si esa es la terminología correcta)? –

+5

@Russ, eso es lo que hará que convertirlo en una lista ... De lo contrario, tiene que hacer Seq.iter (printfn "% A") cuadrados – Benjol

+0

Veo que printfn "% A" [1 .. 2000] solo muestra los primeros 100 valores La solución de Benjol imprimirá la lista completa. – Juliet

9

Si desea mostrar todos los valores de la secuencia sin transformando en una lista, puede iterar directamente en la secuencia de esta manera:

Seq.iter (printfn "%A") squares 

Tenga en cuenta que usted está tomando un riesgo: si, como Brian insinúa, la secuencia es infinita, podrías esperar bastante. (En este caso, Seq.skip y Seq.take son sus amigos)

+0

En una nota relacionada, esta solución 'iter' también funciona cuando se imprimen grandes matrices a la consola en su totalidad, es decir, Array.iter (printfn "% A") –