F# - Exibir resultados completos na janela interativa F#
-
19-09-2019 - |
Pergunta
Isenção de responsabilidade: Total F# no novato Pergunta!
Se eu digitar o seguinte em um arquivo F# no Visual Studio
#light
let squares =
seq { for x in 1 .. 10 -> x * x }
printf "%A" squares
e execute f# interativo nele destacando e pressionando Alt+Digitar, a saída na janela interativa é
>
seq [1; 4; 9; 16; ...]
val squares : seq<int>
>
Mas eu quero ver a sequência completa, ou seja,
>
seq [1; 4; 9; 16; 25; 36; 49; 64; 81; 100]
val squares : seq<int>
>
Isso é possível? Espero que haja um cenário para isso que eu perdi.
Solução
'SEQ' é uma construção preguiçosamente avaliada; Pode ser infinito, e é por isso que o FSI mostra apenas os primeiros valores. Se você quiser ver tudo, uma coisa fácil de fazer é converter em uma lista, por exemplo
printf "%A" (squares |> Seq.tolist)
Outras dicas
Se você deseja exibir todos os valores na sequência sem se transformar em uma lista, pode iterar diretamente na sequência como assim:
Seq.iter (printfn "%A") squares
Observe que você está correndo um risco: se, como Brian sugerir, a sequência é infinita, você pode estar em uma espera bastante longa. (Nesse caso, Seq.skip
e Seq.take
são seus amigos)
Uma alternativa é definir fsi.PrintLength
para um número adequadamente grande, por exemplo
> fsi.PrintLength <- 500