See SML full list

前端 未结 3 1098
深忆病人
深忆病人 2021-01-14 06:27

Is there any way to print full list using SML?

Usually what happen is in SML when I have too many elements it prints first few elements separated by \",\" and then i

相关标签:
3条回答
  • 2021-01-14 07:00

    This output is only for debugging and while is convenient, is not a proper way to do so (you don't get this from running an executable if you generate it). To print out all elements independent of print limit set in ML prompt of your choice, you can do following:

    fun listToString [] = "[]\n"
    |   listToString (c::l) =
            "[" ^ (Int.toString c)
            ^ foldl (fn (s1, s2) => s2 ^ ", " ^ s1) "" (map (Int.toString) l)
            ^ "]\n"
    val _  = print (listToString a)
    
    0 讨论(0)
  • 2021-01-14 07:02

    Assuming that you are using SML/NJ.

    What you wan't to customize is the reference values in Control.Print. In this case you wan't to change the value of printLength to something larger, for example

    Control.Print.printLength := 100;
    

    In general it is the print* references you wan't to change. However for strings, they chose to call it stringDepth, for some reason.


    Assuming that you are using MosML.

    From the Moscow ML Language Overview, it is described that the Meta unit exposes these two functions (to "control the interactive system")

    val printDepth : int ref  (* limit printed data depth *)
    val printLength : int ref (* limit printed list and vector length *)
    
    0 讨论(0)
  • 2021-01-14 07:15

    I assume you are using Poly/ML. The function PolyML.print_depth says how deep printing should go in any structure (lists included). Change it to something larger:

    PolyML.print_depth 500
    
    0 讨论(0)
提交回复
热议问题