【问题标题】:SML/NJ - Print a list mid-executionSML/NJ - 在执行过程中打印一个列表
【发布时间】:2015-08-19 17:24:37
【问题描述】:

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

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

【问题讨论】:

  • I cannot wait for the result to return to print what I want 那么你想做什么?您至少需要提供一些演示代码。
  • 也许我在没有足够说明的情况下编写了它,但我希望能够在函数内部打印我可以访问的列表,例如在let 块中
  • 编辑了问题。
  • 编辑了问题。
  • 你需要实现从列表到字符串的转换,然后打印出来。 sml 支持;,所以你可以先打印,然后返回你需要返回的任何结果。

标签: list printing sml smlnj


【解决方案1】:

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

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

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

你可以对其他类型做类似的事情。

编辑时:这是使用直接 SML 可以做到的最好的方法。 SML/NJ 有自己的extensions,包括“访问编译器内部”和“用户可自定义的漂亮打印”,这听起来很有希望——尽管我对他们对标准库的扩展几乎没有经验。

【讨论】:

    【解决方案2】:

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

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

    然后您可以使用print (intlistToString myList) 代替print myList。它不会打印列表周围的方括号,而不是没有更多代码,但我将把它留作练习,因为我很懒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-25
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 2018-03-19
      • 2013-10-12
      • 2014-05-23
      相关资源
      最近更新 更多