免责声明: 总计 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>
>
这可能吗?我希望有一个我错过的环境。
答案 0 :(得分:11)
'seq'是一个经过延迟评估的结构;它可能是无限的,这就是为什么FSI只显示前几个值。如果你想看到这一切,一件容易的事就是转换成一个列表,例如
printf "%A" (squares |> Seq.tolist)
答案 1 :(得分:10)
如果要显示序列中的所有值而不转换为List,可以直接迭代序列,如下所示:
Seq.iter (printfn "%A") squares
请注意,您冒了风险:如果布莱恩暗示,序列是无限的,那么您可能需要等待相当长的时间。 (在这种情况下,Seq.skip
和Seq.take
是您的朋友)
答案 2 :(得分:2)
如果您得到类似output"+[121 chars]
的输出
fsi.PrintWidth <- 500
将使它更多地输出到控制台。
答案 3 :(得分:0)
另一种方法是将fsi.PrintLength
设置为适当的大数字,例如
> fsi.PrintLength <- 500