有什么方法可以使用SML打印完整列表?查看SML完整列表
通常发生在SML中,当我有太多的元素时,它会先打印用“,”分隔的几个元素,然后用...
省略其余列表,但我希望看到完整列表。有没有办法做到这一点?
val a =[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,19,20]
然后如果我在REPL a
写返回类似:
a=[1,2,3,4,5,...]
有什么方法可以使用SML打印完整列表?查看SML完整列表
通常发生在SML中,当我有太多的元素时,它会先打印用“,”分隔的几个元素,然后用...
省略其余列表,但我希望看到完整列表。有没有办法做到这一点?
val a =[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,19,20]
然后如果我在REPL a
写返回类似:
a=[1,2,3,4,5,...]
假设你正在使用SML/NJ。
你想要定制的是Control.Print中的参考值。在这种情况下,你wan't到printLength
值更改为更大的东西,例如
Control.Print.printLength := 100;
一般来说它是print*
引用您wan't改变。然而,对于字符串,他们选择将其称为stringDepth
,出于某种原因。
假设您正在使用MosML。
从Moscow ML Language Overview,它描述了元单元暴露这两个函数(“控制交互系统”)
val printDepth : int ref (* limit printed data depth *)
val printLength : int ref (* limit printed list and vector length *)
我假定您使用多晶硅/ ML。功能PolyML.print_depth
说明在任何结构(包括列表)中打印的深度应该如何。将其更改为更大的东西:
PolyML.print_depth 500
该输出只用于调试,而方便,是不是这样做的一个适当的方式(你不运行可执行文件在你生成它得到这个)。要打印出所有与您在选择的ML提示中设置的打印限制无关的元素,您可以执行以下操作:
fun listToString [] = "[]\n"
| listToString (c::l) =
"["^(Int.toString c)
^foldl (fn (s1, s2) => s2^", "^s1) "" (map (Int.toString) l)
^"]\n"
val _ = print (listToString a)
使用标准库的更简单的实现将是'fun listToString l =“[”^ String.concatWith“,”(List.map Int.toString l)^“]”'。 –
完美,非常感谢。你知道哪里可以找到PolyML签名的完整文档吗?我已经搜索了相当数量但找不到任何东西,即使在PolyML网站上也是如此! – csey
@CharlieSeymour不幸的是没有。自从我写了这个答案以来,我还没有使用过PolyML,因此您最好使用Google搜索。我发现至少这两个看起来很有前景的链接:http://www.lfcs.inf.ed.ac.uk/software/polyml/docs/Intro1.html和http://polyml.org/docs/PrettyPrint.html –
唉,大部分看起来已经过时了。无论如何感谢您的尝试! – csey