有没有办法使用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中,当我有太多元素时,它会打印前几个元素,用“,”分隔,然后用...
省略列表的其余部分,但我想看到完整的列表。有没有办法这样做?
val a =[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,19,20]
a
,它会返回类似以下内容:a=[1,2,3,4,5,...]
printLength
的值更改为较大的值,例如。Control.Print.printLength := 100;
print*
引用。然而对于字符串,由于某种原因,他们选择将其称为stringDepth
。
val printDepth : int ref (* limit printed data depth *)
val printLength : int ref (* limit printed list and vector length *)
我假设您正在使用Poly/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) ^ "]"
。 - Andreas Rossberg