Numeric — 숫자를 표시하고 읽는 유틸리티

Numeric — 숫자를 표시하고 읽는 유틸리티

Numeric 모듈은 숫자를 다양한 기수(base)와 표기법으로 문자열로 표시(show)하고, 또 문자열에서 숫자를 읽어 오는(read) 유틸리티 함수들을 제공해요. 16진수·8진수·10진수 표시, 부호 처리, 부동소수점의 과학적 표기법 변환 같은 일들을 다룰 수 있어요. 텍스트 형식의 숫자를 직접 다뤄야 하는 프로그램에서 자주 쓰여요.

출처: Haskell 2010 언어 리포트

본문

이 모듈이 내보내는 것들은 다음과 같아요.

module Numeric (

    showSigned,  showIntAtBase,  showInt,  showHex,  showOct,  showEFloat,

    showFFloat,  showGFloat,  showFloat,  floatToDigits,  readSigned,  readInt,

    readDec,  readOct,  readHex,  readFloat,  lexDigits,  fromRat

  ) where

38.1 표시하기 (Showing)

showSigned
:: Real a => (a -> ShowS) -- 부호 없는 값을 표시할 수 있는 함수
    -> Int               -- 둘러싼 문맥의 우선순위
    -> a                 -- 표시할 값
    -> ShowS

부호가 있을 수 있는 Real 값을 문자열로 변환해요.

showIntAtBase :: Integral a => a -> (Int -> Char) -> a -> ShowS

첫 번째 인자로 지정된 기수와, 두 번째 인자로 지정된 문자 표현을 사용해 음이 아닌 Integral 수를 표시해요.

showInt :: Integral a => a -> ShowS

음이 아닌 Integral 수를 10진법으로 표시해요.

showHex :: Integral a => a -> ShowS

음이 아닌 Integral 수를 16진법으로 표시해요.

showOct :: Integral a => a -> ShowS

음이 아닌 Integral 수를 8진법으로 표시해요.

showEFloat :: RealFloat a => Maybe Int -> a -> ShowS

부호 있는 RealFloat 값을 과학적(지수) 표기법으로 표시해요(예: 2.45e2, 1.5e-3). 호출 showEFloat digs val에서, digsNothing이면 값을 전체 정밀도로 표시하고, digsJust d이면 소수점 뒤에 최대 d 자리만 표시해요.

showFFloat :: RealFloat a => Maybe Int -> a -> ShowS

부호 있는 RealFloat 값을 표준 십진 표기법으로 표시해요(예: 245000, 0.0015). 호출 showFFloat digs val에서, digsNothing이면 값을 전체 정밀도로 표시하고, digsJust d이면 소수점 뒤에 최대 d 자리만 표시해요.

showGFloat :: RealFloat a => Maybe Int -> a -> ShowS

부호 있는 RealFloat 값을, 절댓값이 0.1과 9,999,999 사이인 인자에 대해서는 표준 십진 표기법으로, 그 외에는 과학적 표기법으로 표시해요. 호출 showGFloat digs val에서, digsNothing이면 값을 전체 정밀도로 표시하고, digsJust d이면 소수점 뒤에 최대 d 자리만 표시해요.

showFloat :: RealFloat a => a -> ShowS

부호 있는 RealFloat 값을, 절댓값이 0.1과 9,999,999 사이인 인자에 대해서는 표준 십진 표기법으로, 그 외에는 과학적 표기법을 사용해 전체 정밀도로 표시해요.

floatToDigits :: RealFloat a => Integer -> a -> ([Int], Int)

floatToDigits는 기수와 음이 아닌 RealFloat 수를 받아, 숫자 목록과 지수를 돌려줘요. 특히 x>=0이고

 floatToDigits base x = ([d1,d2,...,dn], e)

이면 다음이 성립해요.

n >= 1
x = 0.d1d2...dn ⋆ (base⋆⋆e)
0 <= di <= base-1

38.2 읽기 (Reading)

참고: readIntshowIntAtBase의 '쌍대(dual)'이고, readDecshowInt의 '쌍대'예요. 일관되지 않은 명명은 역사적 사고(accident)예요.

readSigned :: Real a => ReadS a -> ReadS a

부호 없는 값을 읽는 reader가 주어지면, 부호 있는 Real 값을 읽어요.

readInt
:: Num a => a          -- 기수
    -> (Char -> Bool)  -- 이 기수에서 유효한 자릿수를 구별하는 술어
    -> (Char -> Int)   -- 유효한 자릿수 문자를 Int로 변환하는 함수
    -> ReadS a

임의의 기수로 부호 없는 Integral 값을 읽어요.

readDec :: Num a => ReadS a

부호 없는 수를 십진 표기법으로 읽어요.

readOct :: Num a => ReadS a

부호 없는 수를 8진 표기법으로 읽어요.

readHex :: Num a => ReadS a

부호 없는 수를 16진 표기법으로 읽어요. 대문자와 소문자 모두 허용돼요.

readFloat :: RealFrac a => ReadS a

십진 과학적 표기법으로 표현된 부호 없는 RealFrac 값을 읽어요.

lexDigits :: ReadS String

비어 있지 않은 십진 숫자 문자열을 읽어요.

38.3 기타 (Miscellaneous)

fromRat :: RealFloat a => Rational -> a

RationalRealFloat 값으로 변환해요.

더 알아보기 (Learn more)