Главная » Haskell » Prelude: Функции – ЧАСТЬ 1

0

Функция: abs

Описание: возвращает модуль заданного числа.

Определение:

abs :: Num  a  => a ->  a abs  x  | x  >= 0        =  x

| otherwise = -x

Функция: absReal

Описание: возвращает модуль заданного числа. Используется вместо  функции

abs в определениях методов класса Num.

Определение:

absReal :: Ord a  => a ->  a absReal  x  | x  >= 0       = x

| otherwise = -x

Функция: all

Описание: при применении к предикату и списку возвращает True, если все элементы заданного списка удовлетворяют предикату, и False в противном случае. Аналогична функции any.

Определение:

all :: (a  ->  Bool)   ->  [a] ->  Bool all p xs  =  and (map p xs)

Функция: and

Описание: осуществляет конъюнкцию всех значений заданного булевского списка (см. также or).

Определение:

and ::  [Bool] ->  Bool

and xs  = foldr  (&&)  True  xs

Функция: any

Описание: при применении к предикату и списку возвращает True, если все элементы заданного списка удовлетворяют предикату, и False в противном случае. Синоним функции all.

Определение:

any :: (a  ->  Bool)   ->  [a] ->  Bool any p xs  =  and (map p xs)

Функция: appendFile

Описание: функция для дозаписывания информации в заданный файл.

Определение:

appendFile  :: FilePath ->  String ->  IO ()

Функция определена в виде примитива.

Функция: approxRational

Описание: функция для аппроксимации рационального числа с заданной точностью.

Определение:

approxRational :: RealFrac  a => a ->  a  -> Rational approxRational x  eps =  simplest (x eps)  (x + eps)

where

simplest x  y  | y  < x  = simplest y  x                 | x  == y  = xr

| x  > 0 = simplest’ n d n’ d’  | y  < 0   = simplest’ (-n’)  d’  (-n) d

| otherwise = 0 :% 1

where xr@(n :% d)  =  toRational x (n’  :%  d’)  =  toRational  y

simplest’ n d n’ d’ | r == 0       = q :% 1

| q /=  q’    = (q  + 1)  :% 1

| otherwise = (q  * n’’ + d’’) :% n’’

where (q, r)         =  quotRem  n d (q’, r’)          = quotRem  n’ d’

(n’’ :% d’’) = simplest’ d’ r’ d r

Функция: asciiTab

Описание: функция, просто возвращающая таблицу символов ASCII.

Определение:

asciiTab :: [(String,  String)] asciiTab =  zip  [’\NUL’..’ ’]

["NUL", "SOH", "STX",  "ETX",  "EOT",  "ENQ",  "ACK",  "BEL",  "BS",    "HT",    "LF",   "VT",  "FF",    "CR",    "SO",    "SI", "DLE",  "DC1",  "DC2",  "DC3",  "DC4",  "NAK",  "SYN",  "ETB", "CAN",  "EM",    "SUB",  "ESC",  "FS",   "GS",    "RS",    "US",  "SP"]

Функция: asTypeOf

Описание: синоним функции const для приведения типов.

Определение:

asTypeOf :: a  ->  a ->  a asTypeOf =  const

Функция: atan

Описание: тригонометрическая функция для вычисления арктангенса заданного числа.

Определение:

atan  :: Floating a => a ->  a

Функция определена в виде примитива.

Функция: break

Описание: принимает на вход предикат и список, разбивает  входной список на два выходных списка, возвращаемых в виде кортежа. Точкой разделения исходного списка служит первый элемент, для которого заданный предикат принимает истинное значение. Если предикат не выполняется ни для одного из элементов, то первым элементом кортежа является исходный список целиком, а вторым — пустой список.

Определение:

break  :: (a  ->  Bool)   ->  [a]  ->  ([a], [a]) break  p xs  =  span  p’ xs

where p’ x  = not  (p  x)

Функция: catch

Описание: функция для «связывания» действия ввода/вывода с  обработчиком ошибки, которая может произойти во время этого действия.

Определение:

catch  :: IO a ->  (IOError ->  IO  a)  ->  IO a

Функция определена в виде примитива.

Функция: ceiling

Описание: возвращает  наименьшее  целое, которое  не меньше  аргумента. Эта функция связана с функцией floor.

Определение:

ceiling :: (RealFrac a, Integer  b)  => a ->  b

Функция определена в виде примитива.

Функция: chr

Описание: получает на вход целое в промежутке от 0 до 255, возвращает символ, кодом которого является это целое. Является функцией, обратной функции ord. Если функция будет применена к  целому числу, находящемуся  за пределами данного интервала, то в результате возникнет ошибка.

Определение:

chr  ::  Int ->  Char

Функция определена в виде примитива.

Функция: concat

Описание: получает на вход список списков, объединяет их с  использованием оператора (++).

Определение:

concat  ::  [[a]]  ->  [a]

concat  xs  = foldr  (++)  [] xs

Функция: concatMap

Описание: функция, совмещающая в себе действия функций map и concat. Получает на вход функцию, возвращающую список списков, а также исходный список, к которому  применяется заданная функция.  Результат её работы сращивается конкатенацией (++).

Определение:

concatMap :: (a  ->  [b]) ->  [a]  ->  [b] concatMap f =  concat  . map  f

Функция: const

Описание: функция, возвращающая свой первый аргумент при заданных двух.

Определение:

const  :: a  ->  b ->  a const  k  _ =  k

Функция: cos

Описание: тригонометрическая функция косинуса, аргументы которой считаются заданными в радианах.

Определение:

cos  :: Floating a  => a ->  a

Функция определена в виде примитива.

Функция: curry

Описание: функция для получения каррированной  функции из  некаррированной. Получает на вход некаррированную функцию и два её аргумента в обычном для языка Haskell стиле. Возвращает результат заданной функции на этих аргументах, собранных в пару (кортеж). Является обратной по действию к функции uncurry.

Определение:

curry :: ((a, b)  ->  c) ->  (a  ->  b ->  c) curry f x  y  =  f  (x, y)

Функция: cycle

Описание:  функция,   осуществляющая бесконечное применение   конкатенации (++) к заданному списку. В результате получается бесконечный список, состоящий из элементов первоначального списка.

Определение:

cycle  ::  [a]  -> [a]

cycle [] = error "Prelude.cycle:  empty list" cycle xs  = xs’

where xs’  =  xs  ++  xs’

Функция: denominator

Описание: возвращает знаменатель дробного числа. Работает в паре с функцией

numerator.

Определение:

denominator  :: Integral a =>  Ratio   a ->  a denominator  (x :%  y) = y

Функция: digitToInt

Описание:  преобразует символьное представление одной цифры в соответствую щее целое значение.

Определение:

digitToInt ::  Char ->  Int

digitToInt c  | isDigit c  = fromEnum  c   fromEnum  ’0’

| c  >= ’a’ &&  c  <= ’f’ = fromEnum  c  fromEnum  ’a’ + 10

| c  >= ’A’ &&  c  <= ’F’ = fromEnum  c  fromEnum  ’A’ + 10

| otherwise = error "Char.digitToInt: not  a digit"

Функция: div

Описание: выполняет  целочисленное деление своих целых аргументов и возвращает результат этой операции.

Определение:

div   :: Integral a => a  ->  a ->  a

Функция определена в виде примитива.

Функция: doReadFile

Описание: получает на вход строку с именем файла, возвращает  строку с его содержимым. Возвращает ошибку, если файл не может быть открыт или не найден.

Определение:

doReadFile  :: String  ->  String

Функция определена в виде примитива.

Функция: doubleToFloat

Описание: функция для приведения числа типа Double к числу одинарной точности (тип Float).

Определение:

doubleToFloat :: Double  ->  Float

Функция определена в виде примитива.

Функция: doubleToRatio

Описание: функция для приведения числа типа Double к виду обычной дроби.

Определение:

doubleToRatio   :: Integral a => Double ->  Ratio   a

doubleToRatio   x  | n >= 0       = (fromInteger m   * fromInteger b  ^  n)  %   1

| otherwise = fromInteger m   %   (fromInteger b  ^  (-n)) where (m,  n)  = decodeFloat  x

b         =  floatRadix  x

Функция: doubleToRational

Описание: функция для преобразования числа типа Double  (действительного) к рациональному.

Определение:

doubleToRational :: Double ->  Rational

Функция определена в виде примитива.

Функция: drop

Описание: принимает на вход целое число и список, возвращает список, из начала которого  удалено указанное первым аргументом число  элементов. Если число элементов списка меньше, чем требуется  удалить из начала, то возвращается пустой список.

Определение:

drop  :: Int ->  [a] ->  [a] drop  0 xs                         =  xs drop  _  []                         =  []

drop  n (_:xs) | n > 0 = drop  (n  1)  xs

drop  _ _                          = error "PreludeList.drop:  negative  argument"

Функция: dropWhile

Описание: принимает на вход некоторый предикат и список, удаляет элементы из начала списка до тех пор, пока удаляемые элементы удовлетворяют предикату. Определение:

dropWhile  :: (a  ->  Bool)  ->  [a] ->  [a] dropWhile  p  []                                = []

dropWhile  p (x:xs) | p x             =  dropWhile  p xs

| otherwise = (x:xs)

Функция: either

Описание: функция для работы со значениями типа Either. Применяет заданную функцию к левой или правой части значения и возвращает результат этой функции.

Определение:

either :: (a  ->  c) ->  (b  ->  c) ->  Either a b ->  c either l r (Left x)  =  l x

either l r  (Right y) = r  y

Функция: elem

Описание: принимает на вход значение и список; возвращает True, если заданное значение принадлежит списку, и False  в противном  случае. Элементы списка должны иметь тот же тип, что и значение.

Определение:

elem :: Eq a => a ->  [a]  ->  Bool elem x  xs  = any  (==  x) xs

Функция: error

Описание: принимает на вход строку, создает значение-ошибку  с  прикрепленным сообщением. Ошибка эквивалентна неопределённому значению (?). Любая

попытка доступа к подобному значению приводит к завершению программы. Сообщение выводится  на экран для отладки.

Определение:

error ::  String ->  a

Функция определена в виде примитива.

Функция: exp

Описание: вычисляет экспоненту (значение exp n эквивалентно en).

Определение:

exp :: Floating a  => a ->  a

Функция определена в виде примитива.

Функция: filter

Описание: принимает на вход предикат и список, возвращает список, содержащий все элементы исходного  списка, для которых предикат является истинным. Определение:

filter :: (a  ->  Bool)   ->  [a]  ->  [a] filter p xs  = [k  | k  < xs,   p k]

Функция: flip

Описание: применяется к бинарным функциям. Возвращает значение заданной функции, подсчитанное на аргументах в обратном порядке.

Определение:

flip :: (a  ->  b ->  c) ->  b  ->  a ->  c flip f x  y  = f y  x

Функция: floatProperFraction

Описание: функция для получения из действительного числа пары, состоящей из целой и дробной его частей.

Определение:

floatProperFraction :: (RealFrac a, Integral  b)  => a ->  (b, a) floatProperFraction x  | n >= 0       = (fromInteger m   *  fromInteger  b ^  n, 0)

| otherwise = (fromInteger  w,  encodeFloat  r n) where (m,  n)  = decodeFloat  x

b           =  floatRadix  x

(w,  r) = quotRem  m   (b  ^  (-n))

Функция: floatToRational

Описание: функция для преобразования действительного числа типа Float в рациональное.

Определение:

floatToRational :: Float   ->  Rational

Функция определена в виде примитива.

Функция: floor

Описание: возвращает  наибольшее  целое число, которое  не больше  заданного аргумента. С этой функцией связана функция ceiling.

Определение:

floor :: (RealFrac a, Integral  b)  => a ->  b

Функция определена в виде примитива.

Функция: foldl

Описание: сворачивает заданный список с использованием заданного бинарного оператора и начального значения (свёртка производится по ассоциации влево). Определение:

foldl :: (a  ->  b ->  a)  ->  a  -> [b] ->  a1 foldl f z  []          =  z

foldl f z  (x:xs) = foldl f (f z  x) xs

Функция: foldl’

Описание: строгий аналог функции foldl. Делает то же самое.

Определение:

foldl’ :: (a  ->  b ->  a)  ->  a ->  [b] ->  a foldl’ f a []     = a

foldl’ f a (x:xs) = (foldl’ f $! f  a x) xs

Функция: foldl1

Описание: левоассоциативная свёртка непустых списков. В качестве начального значения берётся голова списка. См. функцию foldl.

Определение:

foldl1 :: (a  ->  a ->  a)  ->  [a] ->  a foldl1 f (x:xs) =  foldl f x  xs

Функция: foldr

Описание: сворачивает заданный список с использованием заданного бинарного оператора и начального значения (свёртка производится по ассоциации вправо). Определение:

foldr :: (a  ->  b ->  b)  ->  b ->  [a] ->  b foldr f z  []     = z

foldr f z  (x:xs) = f x  (foldr  f z  xs)

Функция: foldr1

Описание: правоассоциативная свёртка для непустых списков. В  качестве  начального значения берётся голова списка. См. функцию foldr.

Определение:

foldr1 :: (a  ->  a ->  a)  ->  [a] ->  a foldr1 f [x]    =  x

foldr1 f (x:xs) = f x  (foldr  1 f xs)

Функция: fromInt

Описание: преобразует число из типа Int в целочисленный тип из класса Num.

Определение:

fromInt :: Num  a =>  Int ->  a

Функция определена в виде примитива.

Функция: fromInteger

Описание: преобразует число из типа Integer в целочисленный тип  из класса

Num.

Определение:

fromInteger :: Num  a =>  Integer ->  a

Функция определена в виде примитива.

Функция: fromIntegral

Описание: функция для преобразования заданного числа в значение перечислимого множества. Осуществляет простое преобразование в целое число и обратно. Определение:

fromIntegral :: (Integral a, Num  b) => a ->  b fromIntegral =  fromInteger . toInteger

Функция: fst

Описание: возвращает первый элемент кортежа, состоящего из двух элементов.

См. также описание функции snd.

Определение:

fst ::  (a, b)  ->  a fst  (x,  _)  = x

Функция: gcd

Описание: функция для получения наибольшего общего делителя заданного числа. Связана с функцией lcm.

Определение:

gcd :: Integral a =>  a ->  a ->  a

gcd 0 0 = error "Prelude.gcd: gcd 0 0 is  undefined." gcd x  y  = gcd’  (abs  x) (abs  y)

where  gcd’  x  0  = x

gcd’  x  y  = gcd’  y  (x ‘rem‘ y)

Функция: getChar

Описание: функция для чтения из стандартного потока ввода одного символа.

Определение:

getChar  ::  IO  Char

Функция определена в виде примитива.

Функция: getContents

Описание: функция для чтения содержимого файла в строку символов.

Определение:

getContents ::  IO  String

Функция определена в виде примитива.

Функция: getLine

Описание: функция для получения строки с клавиатуры. Возвращает  строку, обернутую в монаду IO.

Определение:

getLine :: IO  String getLine =  do c  < getChar

if c==’\n’  then  return ""

else  do cs  < getLine return  (c:cs)

Функция: head

Описание: возвращает первый элемент непустого списка. При применении к пустому списку результатом будет выведено сообщение об ошибке.

Определение:

head ::  [a] ->  a head  (x:_) =  x

Функция: id

Описание: функция тождества, возвращает значение своего аргумента.

Определение:

Источник: Душкин Р. В., Справочник по языку Haskell. М.: ДМК Пресс, 2008. 544 с., ил.

По теме:

  • Комментарии