2013-09-06 3 views
3

표준 ML에서 일부 출력을 포맷하려고합니다. 특정 소수점 이하를 반올림하여 실제 값을 표시해야하며 과학 표기법을 사용하여 실제 값을 표시 할 수 있어야합니다.표준 ML 인쇄 출력을 포맷하는 방법은 무엇입니까?

인쇄 기능에 대한 서명은 형식 코드 나 다른 매개 변수의 사용을 허용하지 않는 것

val it = fn : string -> unit 

입니다. 나는 또한 온라인으로 문서를 찾는 행운이 없었습니다. 이상 적으로 나는 SML의 print 함수가 printf와 유사한 기능을 C에서 사용하기를 희망했다. ...

답변

4

표준 ML은 정적으로 타입 된 언어이다. 유형이 안전한 방법으로 printf과 같은 것을 만드는 것은 어렵습니다.

SML 기본 라이브러리에는 숫자에 대한 형식 지정 작업이 포함되어 있습니다. 그러나 그들을 사용하는 것은 상대적으로 장황하고 파악하기가 상대적으로 어렵습니다. 오른쪽

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

미운 예를 들어, 소수점 후 3 개 장소와 과학적 표기법의 문자열로 실수를 포맷하려면, 다음과 같이 할 수 있습니까?

일부 구현은 다른 형식 지정 방법을 제공합니다. 예를 들어, SML/NJ에는 printf 스타일 서식 문자열을 사용할 수있는 Format 구조가 있습니다. 그러나, 인수는 그 유형에 따라 포장해야합니다

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

다른 SML 구현은 자신의 사용자 서식 기능을 가지고 있습니다.