2009-10-02 17 views
9

Nota prawna:Razem F # Pytanie dla nowicjusza!F # - Wyświetl pełne wyniki w oknie interaktywnym F #

Gdybym wpisz następujące polecenie w na # pliku F w Visual Studio

#light 

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

printf "%A" squares 

i uruchomić F # interaktywne na nim podświetlając i naciskając Alt + Enter, wyjście w interaktywnym oknie jest

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

> 

Ale chcę zobaczyć pełną sekwencję tj

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

> 

Czy to możliwe? Mam nadzieję, że jest miejsce na to, że tęskniłem.

Odpowiedz

9

"seq" jest lazily-oceniony konstrukt; może być nieskończony, dlatego FSI pokazuje tylko kilka pierwszych wartości. Jeśli chcesz zobaczyć to wszystko, prostą rzeczą jest konwersja na listę, np.

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

Dzięki Brian, to ma teraz sens. Czy można poprosić FSI o ocenę wszystkich wartości w seq zakresie rozumienia (jeśli jest to właściwa terminologia)? –

+5

@Russ, to faktycznie to, co zmieni się w Listę ... W przeciwnym razie musisz zrobić Seq.iter (printfn "% A") kwadraty – Benjol

+0

Zauważam, że printfn "% A" [1 .. 2000] pokazuje tylko pierwsze 100 wartości. Rozwiązanie Benjola wydrukuje całą listę. – Juliet

9

Jeśli chcesz wyświetlić wszystkie wartości w sekwencji bez przekształcenie w liście, można iteracyjne bezpośrednio na sekwencji tak:

Seq.iter (printfn "%A") squares 

pamiętać, że bierzesz ryzyko: jeśli, jak Brian sugeruje, sekwencja jest nieskończona, możesz być na dość długo czekać. (W tym przypadku, Seq.skip i Seq.take są Twoimi przyjaciółmi)

+0

W powiązanej notatce to rozwiązanie "iter" działa również podczas drukowania dużych tablic na konsolę w całości, np. Array.iter (printfn "% A") –