3

有没有办法使用 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,...]
4

3 回答 3

6

假设您使用的是 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 *)
于 2013-01-19T09:13:15.343 回答
4

我假设您使用的是 Poly/ML。该函数PolyML.print_depth表示在任何结构中应该进行多深的打印(包括列表)。将其更改为更大的内容:

PolyML.print_depth 500
于 2013-01-19T09:18:32.823 回答
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)
于 2017-05-20T11:20:17.457 回答