Reputation: 125488
Disclaimer: Total F# Newbie question!
If I type the following into an F# file in Visual Studio
#light
let squares =
seq { for x in 1 .. 10 -> x * x }
printf "%A" squares
and run F# interactive on it by highlighting and pressing Alt+Enter, the output in the interactive window is
>
seq [1; 4; 9; 16; ...]
val squares : seq<int>
>
But I want to see the full sequence i.e.
>
seq [1; 4; 9; 16; 25; 36; 49; 64; 81; 100]
val squares : seq<int>
>
Is this possible? I'm hoping that there is a setting for this that I've missed.
Upvotes: 15
Views: 4679
Reputation: 61
If you get output like output"+[121 chars]
fsi.PrintWidth <- 500
Will make it output more to the console.
Upvotes: 3
Reputation: 23311
An alternative is to set fsi.PrintLength
to a suitably large number, e.g.
> fsi.PrintLength <- 500
Upvotes: 7
Reputation: 118865
'seq' is a lazily-evaluated construct; it could be infinite, which is why FSI only shows the first few values. If you want to see it all, an easy thing to do is convert to a list, e.g.
printf "%A" (squares |> Seq.tolist)
Upvotes: 14
Reputation: 66541
If you want to display all the values in the sequence without transforming into a List, you can iterate directly on the sequence like so:
Seq.iter (printfn "%A") squares
Note that you're taking a risk: if, as Brian hints, the sequence is infinite, you could be in for a rather long wait. (In this case, Seq.skip
and Seq.take
are your friends)
Upvotes: 12