有没有办法使用 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]
然后如果我在 REPL 上写a
它会返回类似:
a=[1,2,3,4,5,...]
假设您使用的是 SML/NJ。
您不想自定义的是Control.Print中的参考值。在这种情况下,您不想将值更改为printLength
更大的值,例如
Control.Print.printLength := 100;
一般来说,它是print*
您不想更改的参考。stringDepth
但是对于字符串,出于某种原因,他们选择调用它。
假设您使用的是 MosML。
从Moscow ML Language Overview中描述了 Meta 单元暴露了这两个功能(以“控制交互系统”)
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)