在SML中将字符串转换为实数

时间:2012-02-10 15:45:43

标签: sml smlnj ml

我想将实数的字符串表示转换为实数。 我知道我可以做Real.fromString("5.5")但是它不会返回实际类型,而是实际选项类型,我无法将其与任何其他实数相加或添加。

2 个答案:

答案 0 :(得分:4)

通过模式匹配或使用Option结构中的某个函数从选项中提取值。例如:

- val x = Real.fromString("5.5");
> val x = SOME 5.5 : real option
- Option.getOpt(x, 0.0);
> val it = 5.5 : real

答案 1 :(得分:3)

要添加到Michael J. Barber的答案中,选项类型是代数数据类型,它可以是SOME,也可以是NONE。

通常,在ML中,我们通常使用模式匹配来解构代数数据类型:

case Real.fromString "5.5" of SOME x => x + 1.0
                            | NONE   => 42.0; 

您可以像Michael J. Barber建议的那样使用getOpt(您实际上并不需要Option.,因为getOpt位于顶级环境中),这是一个简化版本以上。

或者,如果你确定它会是某个,你可以使用valOf(如果它是NONE则会出错):

- val x = Real.fromString "5.5";
val x = SOME 5.5 : real option
- valOf x;
val it = 5.5 : real

或者您可以在val中对其进行模式匹配(因为val也是模式匹配,尽管只有一个分支):

- val SOME x = Real.fromString "5.5";
> val x = 5.5 : real