2013-01-19 100 views
2

有什么方法可以使用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,...] 

回答

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 *) 
3

我假定您使用多晶硅/ ML。功能PolyML.print_depth说明在任何结构(包括列表)中打印的深度应该如何。将其更改为更大的东西:

PolyML.print_depth 500 
+0

完美,非常感谢。你知道哪里可以找到PolyML签名的完整文档吗?我已经搜索了相当数量但找不到任何东西,即使在PolyML网站上也是如此! – csey

+0

@CharlieSeymour不幸的是没有。自从我写了这个答案以来,我还没有使用过PolyML,因此您最好使用Google搜索。我发现至少这两个看起来很有前景的链接:http://www.lfcs.inf.ed.ac.uk/software/polyml/docs/Intro1.html和http://polyml.org/docs/PrettyPrint.html –

+0

唉,大部分看起来已经过时了。无论如何感谢您的尝试! – csey

0

该输出只用于调试,而方便,是不是这样做的一个适当的方式(你不运行可执行文件在你生成它得到这个)。要打印出所有与您在选择的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) 
+0

使用标准库的更简单的实现将是'fun listToString l =“[”^ String.concatWith“,”(List.map Int.toString l)^“]”'。 –