Gibt es eine Funktion gibt, die direkt auf die int Liste druckt? Ich muss Int-Liste für Debugging-Zwecke drucken. Ich weiß, dass ich dies erreichen kann, indem ich meine eigenen Funktionen schreibe, aber ich möchte wissen, dass es noch eine andere Methode gibt?Drucken int Liste in sml
Antwort
SML/NJ haben nicht so viele Funktionen für ziemlich Druck wie einige andere Implementierungen von SML aber seine PRINTCONTROL signature gibt eine gewisse Flexibilität.
Zum Beispiel mit den Standardeinstellungen müssen Sie dies:
Aber wenn in der REPL bewerten Sie
Control.Print.printLength := 500;
und
Control.Print.linewidth := 80;
dann:
Nein, gibt es keine integrierte Möglichkeit, etwas anderes als Strings in SML zu drucken. Entweder schreiben Sie Ihre eigenen Dienstprogramme oder brechen Sie Ihre Funktionen in kleinere Komponenten, die separat in der REPL getestet werden können, und dann werden Sie automatischen ziemlich Druck des Rückgabewertes erhalten.
Wenn Sie Ihre eigenen Dienstprogramme erstellen möchten, enthält das MLton-Wiki eine Seite, auf der beschrieben wird, wie eine kleine Bibliothek von Kombinatoren zum Drucken der meisten integrierten Typen erstellt wird: http://mlton.org/TypeIndexedValues#_signature.
Für Listen, erhalten sie bis zu dem Punkt, wo Sie schreiben können:
val "[3, 1, 4]" =
let open Show in show (list int) end [3, 1, 4]
In Poly/ML gibt es eine spezielle Funktion PolyML.print
, die die meisten Werte mit der entsprechenden Pretty-Print-Funktion drucken wird. Es ist nicht Teil von Standard ML, weshalb es in der PolyML
Struktur ist. Möglicherweise müssen Sie eine Typbeschränkung verwenden, wenn die Funktion polymorph sein könnte.
> 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
Sie können vollere Debugging-Informationen in Poly/ML mit dem Debugger erhalten. Siehe http://www.polyml.org/documentation/Tutorials/Debugging.html.