Россия, Петерубрг, СПБ-ГПУ, 1998 |
Числовые функции
module Numeric(fromRat, showSigned, showIntAtBase, showInt, showOct, showHex, readSigned, readInt, readDec, readOct, readHex, floatToDigits, showEFloat, showFFloat, showGFloat, showFloat, readFloat, lexDigits) where fromRat :: (RealFloat a) => Rational -> a showSigned :: (Real a) => (a -> ShowS) -> Int -> a -> ShowS showIntAtBase :: Integral a => a -> (Int -> Char) -> a -> ShowS showInt :: Integral a => a -> ShowS showOct :: Integral a => a -> ShowS showHex :: Integral a => a -> ShowS readSigned :: (Real a) => ReadS a -> ReadS a readInt :: (Integral a) => a -> (Char -> Bool) -> (Char -> Int) -> ReadS a readDec :: (Integral a) => ReadS a readOct :: (Integral a) => ReadS a readHex :: (Integral a) => ReadS a showEFloat :: (RealFloat a) => Maybe Int -> a -> ShowS showFFloat :: (RealFloat a) => Maybe Int -> a -> ShowS showGFloat :: (RealFloat a) => Maybe Int -> a -> ShowS showFloat :: (RealFloat a) => a -> ShowS floatToDigits :: (RealFloat a) => Integer -> a -> ([Int], Int) readFloat :: (RealFrac a) => ReadS a lexDigits :: ReadS String
Эта библиотека содержит числовые функции разных сортов, многие из которых используются в стандартном Prelude.
Далее, напомним следующие определения типов из Prelude:
type ShowS = String -> String type ReadS = String -> [(a,String)]
14.1 Функции преобразования величин в строки
- showSigned :: (Real a) => (a -> ShowS) -> Int -> a -> ShowS преобразует возможно отрицательное значение Real типа a в строку. В вызове (showSigned show prec val) val является значением для отображения, prec - приоритетом внешнего контекста, а show - функцией, которая может отобразить (преобразовать в строку) значения без знака.
- showIntAtBase :: Integral a => a -> (Int -> Char) -> a -> ShowS отображает неотрицательное число Integral, используя основание, указанное в первом аргументе, и символьное представление, указанное во втором.
- showInt, showOct, showHex :: Integral a => a -> ShowS отображает неотрицательные числа Integral по основанию 10, 8 и 16 соответственно.
-
showFFloat, showEFloat, showGFloat
:: (RealFloat a) => Maybe Int -> a -> ShowS
Эти три функции отображают значения RealFloat со знаком:
- showFFloat использует стандартную десятичную запись (например, 245000, 0.0015).
- showEFloat использует научную (показательную) запись (например, 2.45e2, 1.5e-3).
- showGFloat использует стандартную десятичную запись для аргументов, чье абсолютное значение находится между 0.1 и 9,999,999, и научную запись иначе.
В вызове (showEFloat digs val), если digs является Nothing, значение отображается с полной точностью; если digs является Just d, то самое большее d цифр после десятичный точки будет отображено. В точности то же самое касается аргумента digs двух других функций.
- floatToDigits :: (RealFloat a) => Integer -> a -> ([Int], Int) преобразует основание и значение в величину в цифрах плюс показатель степени. пр
Более точно, если floatToDigits b r = ([ d1, d2... dn ], e ), то выполняются следующие свойства:
- r = 0.d1 d2 ..., dn * b e
- n >=0
- d1 /=0 (когда n > 0)
- 0 >=d_i >=b-1
14.2 Функции преобразования строк в другие величины
- readSigned :: (Real a) => ReadS a -> ReadS a считывает значение Real со знаком, учитывая наличие функции для считывания значений без знака.
- readInt :: (Integral a) => a -> (Char-> Bool) -> (Char -> Int) -> ReadS a считывает значение Integral без знака с произвольным основанием. В вызове (readInt base isdig d2i) base является основанием, isdig - предикатом, различающим допустимые цифры по этому основанию, а d2i преобразует символ допустимой цифры в Int.
- readFloat :: (RealFrac a) => ReadS a считывает значение RealFrac без знака, изображенное в десятичной научной записи.
- readDec, readOct, readHex :: (Integral a) => ReadS a считывают число без знака в десятичной, восьмиричной и шестнадцатиричной записи соответственно. В случае шестнадцатиричной записи допустимы буквы верхнего и нижнего регистра.
- lexDigits :: ReadS String считывает непустую строку десятичных цифр.
( NB: readInt является "двойственной" для showIntAtBase, а readDec является "двойственной" для showInt. Противоречивые имена этих функций сложились исторически.)
14.3 Прочие функции
fromRat :: (RealFloat a) => Rational ->; a преобразует значение Rational к любому типу в классе RealFloat.