Does there any function exist that directly prints the int list? I have to print int list for debugging purposes. I know that I can achieve this by writing my own functions but I want to know that is there any other method available?
SML/NJ doesn't have as many features for pretty printing as some other implementations of SML but its PRINTCONTROL signature gives some flexibility.
For example, with the default settings you have this:
But if in the REPL you evaluate
Control.Print.printLength := 500;
and
Control.Print.linewidth := 80;
then:
In Poly/ML there is a special function PolyML.print
that will print most values using the appropriate pretty-print function. It's not part of Standard ML which is why it is in the PolyML
structure. You may need to use a type-constraint if the function could be polymorphic.
> fun f (x: int list) = (PolyML.print x; ());
val f = fn: int list -> unit
> f [1,2,3,4];
[1, 2, 3, 4]
val it = (): unit
You can get fuller debugging information in Poly/ML by using the debugger. See http://www.polyml.org/documentation/Tutorials/Debugging.html.
No, there's no built-in way to print anything other than strings in SML. You either write your own utilities or break down your functions into smaller components that can be tested separately within the REPL and then you'll get automatic pretty-printing of the return value.
If you want to build your own utilities, the MLton wiki has a page describing how to build a small library of combinators for printing most of the built-in types: http://mlton.org/TypeIndexedValues#_signature.
For lists, they get to the point where you can write:
val "[3, 1, 4]" =
let open Show in show (list int) end [3, 1, 4]
来源:https://stackoverflow.com/questions/36503405/print-int-list-in-sml