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
。如果没有更多的代码,它不会打印列表周围的方括号,但我会把它留作练习,因为我很懒。
我想在 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
。如果没有更多的代码,它不会打印列表周围的方括号,但我会把它留作练习,因为我很懒。