2009-10-02 17 views
9

Disclaimer:Totale F # domanda newbie!F # - Visualizza i risultati completi nella finestra interattiva F #

Se digito il seguente in un file F # in Visual Studio

#light 

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

printf "%A" squares 

ed eseguire F # interattivo su di esso evidenziando e premendo Alt + Enter, l'output nella finestra interattiva è

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

> 

ma voglio vedere la sequenza completa cioè

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

> 

È possibile? Spero che ci sia un setting per questo che ho perso.

risposta

9

"seq" è un costrutto ponderato; potrebbe essere infinito, motivo per cui FSI mostra solo i primi valori. Se vuoi vedere tutto, una cosa facile da fare è convertire in una lista, ad es.

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

Grazie Brian, questo ha perfettamente senso ora. È possibile chiedere a FSI di valutare tutti i valori nell'intervallo di comprensione seq (se questa è la terminologia corretta)? –

+5

@Russ, è proprio questo che lo trasformerà in una lista ... Altrimenti devi fare quadrati Seq.iter (printfn "% A") – Benjol

+0

Noto che printfn "% A" [1 .. 2000] mostra solo i primi 100 valori. La soluzione di Benjol stamperà l'intera lista. – Juliet

9

Se si desidera visualizzare tutti i valori nella sequenza senza trasformando in una lista, è possibile scorrere direttamente sulla sequenza in questo modo:

Seq.iter (printfn "%A") squares 

nota che si sta prendendo un rischio: se, come suggerisce Brian, la sequenza è infinita, potresti rimanere per un'attesa piuttosto lunga. (In questo caso, Seq.skip e Seq.take sono i tuoi amici)

+0

Su una nota correlata, questa soluzione 'iter' funziona anche quando si stampano array di grandi dimensioni per la console nella sua interezza, vale a dire Array.iter (printfn "% A") –