F# - 在F#交互窗口中显示完整结果

Rus*_*Cam 11 f# f#-interactive

免责声明: F#新手问题!

如果我在Visual Studio中的F#文件中键入以下内容

#light

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

printf "%A" squares
Run Code Online (Sandbox Code Playgroud)

并通过突出显示并按Alt+ 运行F#interactive,Enter交互式窗口中的输出为

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

>
Run Code Online (Sandbox Code Playgroud)

但我希望看到完整的序列即

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

>
Run Code Online (Sandbox Code Playgroud)

这可能吗?我希望有一个我错过的环境.

Bri*_*ian 11

'seq'是一个懒惰评估的结构; 它可能是无限的,这就是为什么FSI只显示前几个值.如果你想看到这一切,一件容易的事就是转换成一个列表,例如

printf "%A" (squares |> Seq.tolist)
Run Code Online (Sandbox Code Playgroud)

  • @Russ,这实际上是什么把它变成List会做...否则你必须做Seq.iter(printfn"%A")正方形 (5认同)

Ben*_*jol 10

如果要显示序列中的所有值而不转换为List,则可以直接迭代序列,如下所示:

Seq.iter (printfn "%A") squares
Run Code Online (Sandbox Code Playgroud)

请注意,你冒了风险:如果像Brian暗示的那样,序列是无限的,你可能需要等待相当长的时间.(在这种情况下,Seq.skip并且Seq.take是你的朋友)


And*_*ton 5

另一种方法是设置fsi.PrintLength为适当的大数,例如

> fsi.PrintLength <- 500
Run Code Online (Sandbox Code Playgroud)