参见SML完整列表

参见SML完整列表,sml,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] 然后,如果我在REPLa上写,它会返回如下结果: a=[1,2,3,4,5,...] 假设您使用的是SML/NJ 您不想自定义的是中的参考值。在这种情况下,您不希望将printLength的值更改为更大的值,

有没有办法用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

您不想自定义的是中的参考值。在这种情况下,您不希望将
printLength
的值更改为更大的值,例如

Control.Print.printLength := 100;
通常,您不想更改的是
print*
引用。然而,对于字符串,出于某种原因,他们选择将其称为
stringDepth



假设您正在使用MosML

从中可以看出,元单元公开了这两个功能(用于“控制交互系统”)


我假设您使用的是Poly/ML。函数
PolyML.print\u 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)

太好了,非常感谢。您知道在哪里可以找到PolyML签名的完整文档吗?我已经在谷歌上搜索了相当数量的内容,但什么都找不到,甚至在PolyML网站上也找不到@不幸的是,查理西摩没有。自从我写了这个答案后,我就没有用过PolyML,所以你最好用谷歌搜索一下。我发现至少这两个链接看起来很有希望:唉,其中大部分似乎过时了。无论如何,谢谢你的努力!在使用SML/NJ时,我们经常做的一件事就是在代码中四处搜索。毕竟它是开源的。文档中的许多歧义都是这样回答的。使用标准库的一个更简单的实现是
有趣的listToString l=“[“^String.concatWith”,”(List.map Int.toString l)^“]
fun listToString [] = "[]\n"
|   listToString (c::l) =
        "[" ^ (Int.toString c)
        ^ foldl (fn (s1, s2) => s2 ^ ", " ^ s1) "" (map (Int.toString) l)
        ^ "]\n"
val _  = print (listToString a)