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

时间:2015-08-19 17:24:38

标签: list printing sml smlnj

我想利用SML程序中的def load_new_category(self, filename): basepath = os.path.dirname(__file__) filepath = os.path.abspath(os.path.join(basepath, "..", "JSON", filename)) with open(filepath) as sample: self.create_new_category(is_active=case['is_active'], description=case['description'], page_title=case['page_title'], meta_keywords=case['meta_keywords'], meta_description=case['meta_description'], navigation_menu=case['navigation_menu'], parent_filter_setting=case['parent_filter_setting'], show_filter=case['show_filter'], sort_filter=case['sort_filter']) 函数进行各种调试,以便在函数内部和执行期间打印print类型数据,例如:在integer list区块内。但是,正如我所见,let只能打印字符串类型数据。我不能等待结果返回打印我想要的东西,因为我在执行期间创建了分支的函数并创建了许多不同的列表,我想看看每个分支末尾的结果列表是什么。

因此,有没有办法在函数内打印列表,因为我会打印一个字符串?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

On edit:这是你用直接SML做的最好的。 SML / NJ有自己的extensions,包括“访问编译器内部”和“用户可自定义的漂亮打印”,听起来很有希望 - 尽管我对标准库的扩展经验不足。

答案 1 :(得分:2)

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

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

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