2013-09-06 2 views
3

Я пытаюсь отформатировать некоторый вывод в стандартном ML. Мне нужно отображать некоторые реальные значения, округленные до определенного десятичного знака, и мне также нужно иметь возможность отображать некоторые реальные значения, используя научную нотацию.Как отформатировать стандартный вывод печати ML?

Сигнатура функции печати,

val it = fn : string -> unit 

, который, кажется, не допускают использования кодов форматирования или любых других параметров. Мне также не удавалось найти документацию в Интернете. В идеале я надеялся, что функция печати в SML будет иметь аналогичную функциональность для printf в C ...

ответ

4

Стандартный ML - это статически типизированный язык. Трудно сделать что-то вроде printf безопасным типом.

Базовая библиотека SML содержит некоторые операции форматирования чисел. Но использовать их относительно многословно и относительно сложно. Например, для форматирования вещественного числа в строку в научной нотации с 3 знаками после десятичной точки, вы можете сделать что-то вроде этого:

Real.fmt (StringCvt.SCI (SOME 3)) 4324423423.5; (* evaluates to string "4.324E9" *) 

Гадкого, верно?

Некоторые варианты реализации предлагают другие методы форматирования. Например, SML/NJ имеет структуру Format, которая позволяет использовать строку форматирования printf. Тем не менее, аргументы должны быть обернуты в зависимости от их типа:

Format.format "%.3e" [Format.REAL 4324423423.5]; (* evaluates to string "4.324e09" *) 

Другие реализации SML могут иметь свои собственные функции пользовательского форматирования.

Смежные вопросы