Expanding # in sml

后端 未结 3 685
南笙
南笙 2020-12-06 12:57

Suppose I have a list in sml which is very big then sml shows a few of the entries and then starts showing # character.

Could someone tell me how could I view the wh

3条回答
  •  再見小時候
    2020-12-06 13:26

    Assuming this is SML/NJ you could use printLength, printDepth and friends from the Control.Print structure.

    The following are a snippet from the documentation of the Control.Print structure:

    printDepth
        The depth of nesting of recursive data structure at which ellipsis begins. 
    
    printLength  
        The length of lists at which ellipsis begins. 
    
    stringDepth
        The length of strings at which ellipsis begins. 
    

    Thus for example we can change how many elements of a list we wan't to be shown in the REPL, by changing the printLength reference

    - Control.Print.printLength;
    val it = ref 12 : int ref
    - [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19];
    val it = [1,2,3,4,5,6,7,8,9,10,11,12,...] : int list
    
    - Control.Print.printLength := 18;
    val it = () : unit
    - [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19];
    val it = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,...] : int list
    
    - Control.Print.printLength := 100;
    val it = () : unit
    - [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19];
    val it = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19] : int list
    

    Note that for strings and data structures, the ellipsis is written as a hash '#' instead. This is for example seen with the below string. Note the '#' at the end of the val it = ... line, which is because the default print depth of strings are 70 characters:

    - "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
    val it = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusm#" : string
    
    - Control.Print.stringDepth;
    val it = ref 70 : int ref
    

    And lastly, an example of how this is seen in nested data structures:

    - Control.Print.printDepth;
    val it = ref 5 : int ref
    - SOME (SOME (SOME (SOME (SOME (SOME (SOME 42))))));
    val it = SOME (SOME (SOME (SOME (SOME #))))
      : int option option option option option option option
    
    - Control.Print.printDepth := 10;
    val it = () : unit
    - SOME (SOME (SOME (SOME (SOME (SOME (SOME 42))))));
    val it = SOME (SOME (SOME (SOME (SOME (SOME (SOME 42))))))
      : int option option option option option option option
    

    The two suggested solutions will of cause print the entire list no matter how long it is.

提交回复
热议问题