Преобразование строки в реальную в SML - PullRequest
1 голос
/ 10 февраля 2012

Я хочу преобразовать строковое представление действительного числа в реальный тип. Я знаю, что могу сделать Real.fromString("5.5"), но он не возвращает реальный тип, а реальный тип опции, который я не могу умножить или добавить с любым другим реальным.

Ответы [ 2 ]

4 голосов
/ 10 февраля 2012

Извлечение значения из опции путем сопоставления с образцом или использования одной из функций в структуре Option . Например:

- val x = Real.fromString("5.5");
> val x = SOME 5.5 : real option
- Option.getOpt(x, 0.0);
> val it = 5.5 : real
3 голосов
/ 11 февраля 2012

Чтобы добавить к ответу Майкла Дж. Барбера, тип параметра - это алгебраический тип данных, который либо НЕСКОЛЬКО, либо НЕТ.

Обычно в ML мы обычно деконструируем алгебраические типы данных с сопоставлением с образцом:

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

Вы можете использовать getOpt, как предложил Майкл Дж. Барбер (вам на самом деле не нужен Option., поскольку getOpt находится в среде верхнего уровня), что является упрощенной версией выше.

Или, если вы уверены, что это будет НЕКОТОРЫЕ, вы можете использовать valOf (что приведет к ошибке, если НЕТ):

- 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
...