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

F#-在F#交互式窗口中显示完整结果,f#,f#-interactive,F#,F# Interactive,免责声明:Total F#新手问题 如果我在VisualStudio中的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> > > 序号

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

如果我在VisualStudio中的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>

>
>
序号[1;4;9;16;…]
瓦尔广场:seq
>
但我想看完整的序列,即

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

>
>
序号[1;4;9;16;25;36;49;64;81;100]
瓦尔广场:seq
>

这可能吗?我希望有一个我错过的设置;它可能是无限的,这就是为什么FSI只显示前几个值。如果您想查看所有内容,一件简单的事情就是将其转换为列表,例如

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

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

Seq.iter (printfn "%A") squares

请注意,您正在冒险:如Brian所暗示的,如果序列是无限的,那么您可能会等待相当长的时间。(在这种情况下,
Seq.skip
Seq.take
是您的朋友)

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

> fsi.PrintLength <- 500

>fsi.PrintLength如果您得到像
output“+[121个字符]

fsi.PrintWidth <- 500

fsi.PrintWidth谢谢Brian,这现在完全有意义了。是否可以要求fsi评估seq理解范围内的所有值(如果这是正确的术语)?@Russ,这就是将其转换为列表的有效方法…否则您必须执行seq.iter(printfn“%a”)square我注意printfn“%a”[1..2000]只显示前100个值。Benjol的解决方案将打印整个列表。@Juliet-我想这就是我昨天玩游戏时看到的。听起来迭代序列是查看值范围的最佳方式。我相信我很快会有更多的F#问题:)@Benjol:很抱歉提到死马,但你介意转y吗我们对答案的评论-该解决方案还将在相关注释中显示非常长的列表的结果(例如,当列表包含100多个项目时),该“iter”解决方案在将大型阵列整体打印到控制台时也有效,即Array.iter(printfn“%a”)