Шаг 35.
Основы языка Haskell.
Основные функции библиотеки Prelude. Арифметические функции

    На этом шаге мы рассмотрим основные арифметические функции.

    Приведём примитивы и встроенные функции языка Haskell, определённые в стандартном модуле Prelude.hs.

Определение.
Примитив (от англ. primitive) - это функция, определение которой встроено в интерпретатор (более точно, они содержатся в Prelude.hs).

    Перечислим основные арифметические функции.

  1. Функция, возвращающая модуль заданного числа:
       abs:: Num a => a -> a
       abs n
    
    Например:
       > abs 4/6          > abs 0   > abs (-398)   > abs (-0.2345)
       0.66666666666667   0         398            0.2345
    
  2. Функция, возвращающая 1, -1 или 0 в зависимости от того, является ли заданное число положительным, отрицательным или нулём:
                 1, если x>0;
       sgn(x) ↔ -1, если x<0;
                 0, если x=0;
    
       signumReal:: Num a => a -> a
       signumReal n
    
    Например:
       > signumReal 23.4   > signumReal 0   > signumReal (-1111)
       1                   0                -1
    

    Замечание. В версии интерпретатора Haskell (май, 2006) имя функции: signum n. Например:
       > signum 14/3   > signum 0   > signum (-0.32587)
       1.0             0            -1.0
    

  3. Функция, возвращающая квадратный корень из заданного числа:
       sqrt:: Floating a => a -> a
       sqrt n
    
    Например:
       > sqrt 5           > sqrt 4.444       > sqrt 9   > sqrt 0
       2.23606797749979   2.10807969488822   3.0        0.0
    
    Определена примитивом в трансляторе.

  4. Функция, вычисляющая значение функции y=ex:
       exp:: Floating a => a -> a
       exp n
    
    Например:
       > exp 0   > exp 1            > exp 2            > exp 2.7
       1.0       2.71828182845905   7.38905609893065   14.8797317248728
    
    Определена примитивом в трансляторе.

  5. Функция, возвращающая натуральный логарифм числа:
       log:: Floating a => a -> a
       log n
    
    Например:
       > log 1   > log 2             > log 2.222
       0.0       0.693147180559945   0.798407691217438
    
    Определена примитивом в трансляторе.

  6. Функция, возвращающая разность значений своих аргументов (из второго вычитается первый):
       subtract:: Num a => a -> a -> a
       subtract m n
    
    Например:
       > subtract 2 3   > subtract (-2) (-3)   > subtract 1.0 1.9202
       1                -1                     0.9202
    
  7. Функция, выполняющая целочисленное деление своих целых аргументов и возвращающая результат этой операции:
       div:: Integral a => a -> a -> a
       div m n
    
    Например:
       > div 2 3   > div 5 2   > div (-18) (-2)   > div 10 (-2)
       0           2           9                  -5
    
    Определена примитивом в трансляторе.

  8. Функция, возвращающая остаток от деления одного целочисленного аргумента на другой:
       mod:: Integral a => a -> a -> a
       mod m n
    
    Например:
       > mod 2 3   > mod 5 2   > mod (-18) (-2)   > mod 10 (-2)
       2           1           0                  0
    
       > mod 5 (-2)
       -1
    
    Определена примитивом в трансляторе.

  9. Функция, возвращающая наибольший общий делитель двух целых чисел:
       gcd:: Integral a => a -> a -> a
       gcd m n
    
    Например:
       > gcd 23 20   > gcd 12 16   > gcd (-18) (-36)   > gcd 30 (-100)
       1             4             18                  10
    
       > gcd 50 0
       50
    

    Замечание. Функция не определена, если оба аргумента равны нулю.
  10. Функция, возвращающая наименьшее общее кратное двух целых чисел:
       lcm:: Integral a => a -> a -> a
       lcm m n
    
    Например:
       > lcm 23 20   > lcm 12 16   > lcm (-18) (-36)   > lcm 30 (-100)
       460           48            36                  300
    
       > lcm 0 35    > lcm 23 0
       0             0
    
  11. Функция, возвращающая числитель дробного числа:
       numerator:: Integral a => Ratio a -> a
       numerator n
    
    Например:
       > numerator (2/3)   > numerator (-5/3)   > numerator (10/5)
       2                   -5                   2
    

    Замечание. В версии интерпретатора Haskell (май, 2006) требуется подключить модуль Ratio.
  12. Функция, возвращающая знаменатель дробного числа:
       denominator:: Integral a => Ratio a -> a
       denominator n
    
    Например:
       > denominator (4/5)   > denominator (-8/3)   > denominator (8/4)
       5                     3                      1
    

    Замечание. В версии интерпретатора Haskell (май, 2006) требуется подключить модуль Ratio.
  13. Функция, сокращающая дробь и возвращающая дробь, которую уже нельзя сократить:
       reduce:: Integral a => a -> a -> Ratio a
       reduce m n
    
    Например:
       > reduce 10 5   > reduce (-25) 30   > reduce 36 (-12)
       2 % 1           -5 % 6              4 % -1
    

    Замечание. В версии интерпретатора Haskell (май, 2006) данная функция не обнаружена.
  14. Функция, удаляющая дробную часть числа с плавающей точкой и оставляющая только целую часть:
       truncate:: (RealFrac a, Integral b) => a -> b
       truncate n
    
    Например:
       > truncate 234.56789   > truncate (-0.56789)   > truncate 12
       234                    0                       12
    
    Определена примитивом в трансляторе.

  15. Функция, округляющая значение аргумента до ближайшего целого:
       round:: (RealFrac a, Integral b) => a -> b
       round n
    
    Например:
       > round 2.56789   > round (-123.46789)   > round (-123.54)
       3                 -123                   -124
    
    Определена примитивом в трансляторе.

  16. Функция, возвращающая наибольшее целое число, которое не больше значения аргумента:
       floor:: (RealFrac a, Integral b) => a -> b
       floor n
    
    Например:
       > floor 23.6207   > floor (-111.4321)   > floor 8253
       23                -112                  8253
    
    Определена примитивом в трансляторе.

  17. Функция, возвращающая наименьшее целое число, которое не меньше значения аргумента:
       ceiling:: (RealFrac a, Integral b) => a -> b
       ceiling n
    
    Например:
       > ceiling 23.6207   > ceiling (-111.4321)   > ceiling 8253
       24                  -111                    8253
    
    Определена примитивом в трансляторе.

  18. Функция для получения из действительного числа пары, состоящей из его целой и дробной части:
       floatProperFraction:: (RealFrac a, Integral b) => a -> (b, a)
       floatProperFraction
    
    Например:
       > floatProperFraction 5.5   > floatProperFraction 27.28
       (5,0.5)                     (27,0.280001)
    

    Замечание. В версии интерпретатора Haskell (май, 2006) имя функции:
       properFraction n
    
    Например:
       > properFraction 5.5   > properFraction 27.28
       (5,0.5)                (27,0.280000000000001)
    

    На следующем шаге мы рассмотрим функции приведения к типу.




Предыдущий шаг Содержание Следующий шаг