在SML中,你能将“.3”转换为真正的“0.3”吗?

时间:2013-11-29 18:20:26

标签: sml smlnj ml

我对SML很新,我一直在使用SML / NJ。 假设我有以下简单的功能:

fun test(x) = x / 2.0;

试验(0.3);返回0.15。

我希望它也能用于测试(.3); 现在我收到以下错误:

- test(.3);
stdIn:23.6-23.9 Error: syntax error: deleting  DOT INT RPAREN

当然,我希望它可以与任何形式的0.X一起使用。 这可行吗?谢谢!

2 个答案:

答案 0 :(得分:6)

  

“实常数是一个整数常量,可能后跟一个点(。)和一个或多个数字,可能后跟一个指数符号 E 和一个整数常量;至少有一个必须出现可选部分,因此整数常数不是实常数。例如: 0.7,+ 3.32E5,3E~7 。非示例: 23,.3,4.E5,1E2 .0 。“

来自:标准ML版本2的定义[Robert Harper,Robin Milner,Mads Tofte] 1988

更新

Definition of Standard ML (Revised) 1997修改了以下内容:

  

指数符号(E或e)和十进制的整数常量   符号;

答案 1 :(得分:2)

似乎Real s必须在小数点之前有一些东西,即使它是零,至少在你正在使用的SML的实现中。

我在库或规范中找不到任何关于它的内容,因此它可能是特定于实现的,但同样的是,这两个地方的所有示例都始终在小数点之前放置零事实上,它可能是语言本身的要求。