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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top