Formatting 如何格式化标准ML打印输出?

Formatting 如何格式化标准ML打印输出?,formatting,string-formatting,sml,Formatting,String Formatting,Sml,我正在尝试用标准ML格式化一些输出。我需要显示一些四舍五入到某个小数位的真实值,并且我还需要能够使用科学记数法显示一些真实值 打印功能的签名是 val it = fn : string -> unit 这似乎不允许使用格式化代码或任何其他参数。我也没有在网上找到任何文档。理想情况下,我希望SML中的print函数具有与C中printf类似的功能。标准ML是一种静态类型语言。很难以一种类型安全的方式制作类似于printf的东西 SML Basis库包含一些数字格式化操作。但使用它们相对冗长

我正在尝试用标准ML格式化一些输出。我需要显示一些四舍五入到某个小数位的真实值,并且我还需要能够使用科学记数法显示一些真实值

打印功能的签名是

val it = fn : string -> unit

这似乎不允许使用格式化代码或任何其他参数。我也没有在网上找到任何文档。理想情况下,我希望SML中的print函数具有与C中printf类似的功能。

标准ML是一种静态类型语言。很难以一种类型安全的方式制作类似于printf的东西

SML Basis库包含一些数字格式化操作。但使用它们相对冗长,也相对难以理解。例如,要将实数格式化为小数点后3位的科学记数法字符串,可以执行以下操作:

Real.fmt (StringCvt.SCI (SOME 3)) 4324423423.5; (* evaluates to string "4.324E9" *)
丑陋,对吧

一些实现提供了其他格式化方法。例如,SML/NJ有一个
格式
结构,允许您使用
printf
样式的格式字符串。但是,参数必须根据其类型进行包装:

Format.format "%.3e" [Format.REAL 4324423423.5]; (* evaluates to string "4.324e09" *)
其他SML实现可能有自己的自定义格式化函数