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

时间:2009-10-02 10:41:50

标签: f# f#-interactive

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

如果我在Visual Studio

中的F#文件中键入以下内容
#light

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

printf "%A" squares

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

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

>

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

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

>

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

4 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:10)

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

Seq.iter (printfn "%A") squares

请注意,您冒了风险:如果布莱恩暗示,序列是无限的,那么您可能需要等待相当长的时间。 (在这种情况下,Seq.skipSeq.take是您的朋友)

答案 2 :(得分:2)

如果您得到类似output"+[121 chars]的输出

fsi.PrintWidth <- 500

将使它更多地输出到控制台。

答案 3 :(得分:0)

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

> fsi.PrintLength <- 500