Опубликован: 19.09.2008 | Доступ: свободный | Студентов: 656 / 70 | Оценка: 4.50 / 5.00 | Длительность: 21:25:00
Лекция 15:

Числовые функции

< Лекция 14 || Лекция 15: 123 || Лекция 16 >
Аннотация: В этой лекции вы получите основные сведения о библиотеке Numeric, которая включает в себя числовые функции различных видов

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.

< Лекция 14 || Лекция 15: 123 || Лекция 16 >
Николай Щербаков
Николай Щербаков
Россия, Москва
Олег Корсак
Олег Корсак
Латвия, Рига