2011-05-02 34 views
2

是否可以在不縮寫長列表的情況下在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]);; 

回答

3

您可以使用fsi對象的PrintLength屬性指定打印列表的最大長度。它不會讓你直接指定無窮大,但可以使用:

fsi.PrintLength <- System.Int32.MaxValue 

有幾個類似的屬性,但它們都沒有記錄非常好(見MSDN page),所以你可能需要試驗一下。

+1

這確實會更改交互顯示的元素數量,但它不會更改printf格式的輸出。 – user734239 2011-05-02 11:42:22

+1

@ user734239:我查看了一下源代碼。 'printf'的'PrintLength'值似乎被硬編碼爲100.(printf.fs中的'formatOne'使用'FormatOptions.Default'作爲'%A'case。'FormatOptions.Default'是一個靜態讀取 - 僅屬性。) – wmeyer 2011-05-02 12:55:53