Numeric — 숫자를 표시하고 읽는 유틸리티
Numeric — 숫자를 표시하고 읽는 유틸리티
Numeric 모듈은 숫자를 다양한 기수(base)와 표기법으로 문자열로 표시(show)하고, 또 문자열에서 숫자를 읽어 오는(read) 유틸리티 함수들을 제공해요. 16진수·8진수·10진수 표시, 부호 처리, 부동소수점의 과학적 표기법 변환 같은 일들을 다룰 수 있어요. 텍스트 형식의 숫자를 직접 다뤄야 하는 프로그램에서 자주 쓰여요.
본문
이 모듈이 내보내는 것들은 다음과 같아요.
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에서, digs가 Nothing이면 값을 전체 정밀도로 표시하고, digs가 Just d이면 소수점 뒤에 최대 d 자리만 표시해요.
showFFloat :: RealFloat a => Maybe Int -> a -> ShowS
부호 있는 RealFloat 값을 표준 십진 표기법으로 표시해요(예: 245000, 0.0015). 호출 showFFloat digs val에서, digs가 Nothing이면 값을 전체 정밀도로 표시하고, digs가 Just d이면 소수점 뒤에 최대 d 자리만 표시해요.
showGFloat :: RealFloat a => Maybe Int -> a -> ShowS
부호 있는 RealFloat 값을, 절댓값이 0.1과 9,999,999 사이인 인자에 대해서는 표준 십진 표기법으로, 그 외에는 과학적 표기법으로 표시해요. 호출 showGFloat digs val에서, digs가 Nothing이면 값을 전체 정밀도로 표시하고, digs가 Just 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)
참고: readInt는 showIntAtBase의 '쌍대(dual)'이고, readDec는 showInt의 '쌍대'예요. 일관되지 않은 명명은 역사적 사고(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
Rational을 RealFloat 값으로 변환해요.