SML/NJ - 在执行中打印列表

SML/NJ - Print a list mid-execution

我想在 SML 程序中使用 print 函数来进行调试,以便在函数内部和执行期间打印 integer list 类型的数据,例如在 let 块内。但是,正如我所见,print 只能打印字符串类型的数据。我迫不及待地等待结果 return 来打印我想要的东西,因为我创建的函数在执行过程中会分支并创建许多不同的列表,我想看看每个分支末尾的结果列表是什么。

因此,有没有办法像打印字符串一样在函数内部打印列表?

如果它是 int list 你可以这样做:

fun printIntList ints = app (fn i => print(Int.toString i ^" ")) ints;

然后printIntList [1,2,3]将打印1 2 3

您可以对其他类型执行类似的操作。

编辑:这是您使用直接 SML 所能做的最好的事情。 SML/NJ 有自己的 extensions,包括 "access to compiler internals" 和 "user-customizable pretty printing",这听起来很有前途——尽管我对它们对标准库的扩展没有什么经验。

将整数列表转换为字符串的简单函数:

fun intlistToString []      = ""
  | intlistToString [x]     = Int.toString x
  | intlistToString (x::xs) = Int.toString x ^ ", " ^ intlistToString xs

那你可以用print (intlistToString myList)代替print myList。如果没有更多的代码,它不会打印列表周围的方括号,但我会把它留作练习,因为我很懒。