F#:在没有显式循环的情况下打印完整列表

标签 f#

是否可以在不缩写长列表的情况下在 F# 中打印数据结构?

使用 printf 我似乎只能打印前 100 个元素:

\> let l = [1 .. 200];;

val l : int list =
  [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; 21;
   22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34; 35; 36; 37; 38; 39; 40;
   41; 42; 43; 44; 45; 46; 47; 48; 49; 50; 51; 52; 53; 54; 55; 56; 57; 58; 59;
   60; 61; 62; 63; 64; 65; 66; 67; 68; 69; 70; 71; 72; 73; 74; 75; 76; 77; 78;
   79; 80; 81; 82; 83; 84; 85; 86; 87; 88; 89; 90; 91; 92; 93; 94; 95; 96; 97;
   98; 99; 100; ...]

\> printf "%A\n" l;;   
[1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; 21; 22;
 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34; 35; 36; 37; 38; 39; 40; 41; 42;
 43; 44; 45; 46; 47; 48; 49; 50; 51; 52; 53; 54; 55; 56; 57; 58; 59; 60; 61; 62;
 63; 64; 65; 66; 67; 68; 69; 70; 71; 72; 73; 74; 75; 76; 77; 78; 79; 80; 81; 82;
 83; 84; 85; 86; 87; 88; 89; 90; 91; 92; 93; 94; 95; 96; 97; 98; 99; 100; ...]

val it : unit = ()

在这种情况下,可以遍历元素,但是,在更复杂的数据结构中,有必要分解结构以允许访问列表。

例如,是否可以完整打印以下结构而不将其分解为单独的列表:

\> let l = ([1 ..200], [1..200]);;

?

最佳答案

您可以使用 fsi 对象的 PrintLength 属性来指定打印列表的最大长度。它不允许您直接指定无穷大,但您可以使用:

fsi.PrintLength <- System.Int32.MaxValue

有几个类似的属性,但没有很好地记录它们(请参阅 MSDN page ),因此您可能需要进行一些试验。

关于F#:在没有显式循环的情况下打印完整列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5855781/

相关文章:

f# - 为什么在使用绑定(bind)到 `let` 的联合类型成员时需要括号?

f# - 如何在 fsi 中运行 .fsx

c# - F# 默认值中的依赖属性不匹配

c# - 使用 C# 库中的 Akka.Net actor 调用 F# 库导致 TypeInitializationException

f# - 递归调用的函数类型推断

generics - ToString 为单位值抛出 NullReferenceException ()

f# - netstandard20 中的 FSharp.Core FSharpFunc.FromConverter

f# - 使用 Elmish.WPF (F#) 管理 WPF 选项卡控件?

F# Observable - 将事件流转换为列表

unit-testing - 禁止 F# 编译器警告 : Possible incorrect indentation: this token is offside of context