在 sml 中打印 int 列表

Print int list in sml

有没有直接打印int列表的函数?出于调试目的,我必须打印 int 列表。我知道我可以通过编写自己的函数来实现这一点,但我想知道是否还有其他可用的方法?

不,除 SML 中的字符串外,没有内置方法可以打印任何内容。您要么编写自己的实用程序,要么将您的函数分解为更小的组件,这些组件可以在 REPL 中单独测试,然后您将获得 return 值的自动漂亮打印。

如果您想构建自己的实用程序,MLton wiki 有一个页面描述了如何构建一个小型组合器库以打印大多数内置类型:http://mlton.org/TypeIndexedValues#_signature.

对于列表,它们达到了您可以编写的地步:

val "[3, 1, 4]" =
  let open Show in show (list int) end [3, 1, 4]

SML/NJ 没有像 SML 的其他一些实现一样多的漂亮打印功能,但它的 PRINTCONTROL signature 提供了一些灵活性。

例如,使用默认设置,您有:

但是如果你在 REPL 中评估

Control.Print.printLength := 500;

 Control.Print.linewidth := 80;

然后:

在 Poly/ML 中有一个特殊函数 PolyML.print 可以使用适当的漂亮打印函数打印大多数值。它不是标准 ML 的一部分,这就是它位于 PolyML 结构中的原因。如果函数可以是多态的,您可能需要使用类型约束。

> fun f (x: int list) = (PolyML.print x; ());
val f = fn: int list -> unit
> f [1,2,3,4];
[1, 2, 3, 4]
val it = (): unit

您可以使用调试器在 Poly/ML 中获得更完整的调试信息。参见 http://www.polyml.org/documentation/Tutorials/Debugging.html