Модуль Stdlib
module Stdlib: sig .. end
Стандартная библиотека OCaml.
Этот модуль автоматически открывается в начале каждой компиляции. Поэтому все компоненты этого модуля могут быть указаны по их короткому имени, без добавления префикса Stdlib.
В частности, он предоставляет базовые операции над встроенными типами (числа, булевы значения, последовательности байтов, строки, исключения, ссылки, списки, массивы, каналы ввода-вывода и т. д.) и модули стандартной библиотеки стандартной библиотеки.
Исключения
val raise : exn -> 'a
Вызвать данное исключение.
val raise_notrace : exn -> 'a
Более быстрая версия raise, которая не записывает стек отладки.
- Since 4.02
val invalid_arg : string -> 'a
Вызвать исключение Invalid_argument со значением данной строки.
val failwith : string -> 'a
Вызвать исключение Failure со значением данной строки.
exception Exit
Исключение Exit не вызывается никакой функцией библиотеки. Оно предназначено для использования в ваших программах.
exception Match_failure of (string * int * int)
Исключение, которое возникает, когда ни один из вариантов сопоставления с образцом не применим. Аргументы — это расположение ключевого слова match в исходном коде (имя файла, номер строки, номер столбца).
exception Assert_failure of (string * int * int)
Исключение, которое возникает, когда терпит неудачу утверждение. Аргументы — это расположение ключевого слова assert в исходном коде (имя файла, номер строки, номер столбца).
exception Invalid_argument of string
Исключение, которое вызывается функциями библиотеки для сигнализации о том, что данные аргументы не имеют смысла. Строка предоставляет некоторую информацию программисту. Как правило, это исключение не должно перехватываться, так как оно указывает на ошибку программирования, и код должен быть изменён, чтобы не вызывать его.
exception Failure of string
Исключение, вызываемое функциями библиотеки, чтобы указать, что они не определены для данных аргументов. Строка предназначена для предоставления некоторой информации программисту; вы не должны сопоставлять с образцом строковое значение, поскольку оно может измениться в будущих версиях (вместо этого используйте Failure _).
exception Not_found
Исключение, которое вызывается функциями поиска, когда нужный объект не найден.
exception Out_of_memory
Исключение, которое вызывается сборщиком мусора, когда памяти недостаточно для завершения вычисления. (Ненадёжно для выделения памяти на младшей куче.)
exception Stack_overflow
Исключение, которое вызывается интерпретатором байткода, когда стек вычислений достигает максимального размера. Это часто указывает на бесконечную или чрезмерно глубокую рекурсию в программе пользователя.
До версии 4.10 это не было полностью реализовано компилятором нативном коде.
exception Sys_error of string
Исключение, вызываемое функциями ввода/вывода для сообщения об ошибке операционной системы. Строка предназначена для предоставления некоторой информации программисту; вы не должны сопоставлять с образцом строковое значение, поскольку оно может измениться в будущих версиях (используйте Sys_error _ вместо этого).
exception End_of_file
Исключение, вызываемое функциями ввода, чтобы указать, что достигнут конец файла.
exception Division_by_zero
Исключение, вызываемое операциями целочисленного деления и остатка, когда второй аргумент равен нулю.
exception Sys_blocked_io
Особый случай Sys_error, возникающий, когда ввода-вывода не возможно на канале ввода-вывода без блокировки.
exception Undefined_recursive_module of (string * int * int)
Исключение, которое возникает при оценке некорректного рекурсивного определения модуля. Аргументы — это расположение определения в исходном коде (имя файла, номер строки, номер столбца).
Сравнения
val (=) : 'a -> 'a -> bool
e1 = e2 проверяет структурное равенство e1 и e2. Изменяемые структуры (например, ссылки и массивы) равны тогда и только тогда, когда их текущее содержимое структурно равно, даже если два изменяемых объекта не являются одним физическим объектом. Равенство между функциональными значениями вызывает Invalid_argument. Равенство между циклическими структурами данных может не завершиться. Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val (<>) : 'a -> 'a -> bool
Отрицание (=). Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val (<) : 'a -> 'a -> bool
См. (>=). Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val (>) : 'a -> 'a -> bool
См. (>=). Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val (<=) : 'a -> 'a -> bool
См. (>=). Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val (>=) : 'a -> 'a -> bool
Функции структурного упорядочения. Эти функции совпадают с обычными упорядочениями для целых чисел, символов, строк, последовательностей байтов и чисел с плавающей запятой и расширяют их до общего порядка для всех типов. Порядок совместим с ( = ). Как и в случае с ( = ), изменяемые структуры сравниваются по содержимому. Сравнение функциональных значений вызывает Invalid_argument. Сравнение циклических структур может не завершиться. Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val compare : 'a -> 'a -> int
compare x y возвращает 0, если x равно y, отрицательное целое число, если x меньше y, и положительное целое число, если x больше y. Порядок, реализованный compare, совместим с предикатми сравнения =, < и >, определёнными выше, с одним отличием в обработке значения с плавающей запятой nan. А именно, предикаты сравнения рассматривают nan как разные от любого другого значения с плавающей запятой, включая само себя; в то время как compare рассматривает nan как равное самому себе и меньше любого другого значения с плавающей запятой. Такая обработка nan гарантирует, что compare определяет общее отношение порядка.
compare применительно к функциональным значениям может вызвать Invalid_argument. compare применительно к циклическим структурам может не завершиться.
Функция compare может использоваться в качестве функции сравнения, необходимой для функционалов Set.Make и Map.Make, а также для функций List.sort и Array.sort.
val min : 'a -> 'a -> 'a
Возвращает меньший из двух аргументов. Результат не определён, если один из аргументов содержит значение с плавающей запятой nan.
val max : 'a -> 'a -> 'a
Возвращает большее из двух аргументов. Результат не определён, если один из аргументов содержит значение с плавающей запятой nan.
val (==) : 'a -> 'a -> bool
e1 == e2 проверяет физическое равенство e1 и e2. Для изменяемых типов, таких как ссылки, массивы, последовательности байтов, записи с изменяемыми полями и объекты с изменяемыми переменными экземпляра, e1 == e2 истинно тогда и только тогда, когда физическое изменение e1 также влияет на e2. Для неизменяемых типов поведение ( == ) зависит от реализации; однако гарантируется, что e1 == e2 подразумевает compare e1 e2 = 0. Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val (!=) : 'a -> 'a -> bool
Отрицание (==). Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
Булевы операции
val not : bool -> bool
Булева инверсия.
val (&&) : bool -> bool -> bool
Булева операция 'и'. Вычисление происходит последовательно слева направо: в e1 && e2, e1 вычисляется в первую очередь, и если он возвращает false, e2 вообще не вычисляется. Правоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val (||) : bool -> bool -> bool
Булева операция 'или'. Вычисление происходит последовательно слева направо: в e1 || e2, e1 вычисляется в первую очередь, и если он возвращает true, e2 вообще не вычисляется. Правоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
Отладка
val __LOC__ : string
__LOC__ возвращает расположение, в котором это выражение появляется в файле, в данный момент анализируемом компилятором, с стандартным форматом сообщений об ошибках OCaml: "Файл %S, строка %d, символы %d-%d".
- Since 4.02
val __FILE__ : string
__FILE__ возвращает имя файла, в данный момент анализируемого компилятором.
- Since 4.02
val __LINE__ : int
__LINE__ возвращает номер строки, в которой это выражение появляется в файле, в данный момент разбираемом компилятором.
- Since 4.02
val __MODULE__ : string
__MODULE__ возвращает имя модуля файла, разбираемого компилятором.
- Since 4.02
val __POS__ : string * int * int * int
__POS__ возвращает кортеж (file,lnum,cnum,enum), соответствующий месту, в котором это выражение появляется в файле, в данный момент разбираемом компилятором. lnum — номер текущей строки, cnum — позиция символа в строке, а enum — позиция последнего символа в строке.
- Since 4.02
val __FUNCTION__ : string
__FUNCTION__ возвращает имя текущей функции или метода, включая любые содержащие модули или классы.
- Since 4.12
val __LOC_OF__ : 'a -> string * 'a
__LOC_OF__ expr возвращает пару (loc, expr), где loc — местоположение expr в файле, в данный момент разбираемом компилятором, с форматом ошибки OCaml: "Файл %S, строка %d, символы %d-%d".
- Since 4.02
val __LINE_OF__ : 'a -> int * 'a
__LINE_OF__ expr возвращает пару (line, expr), где line — номер строки, в которой выражение expr появляется в файле, в данный момент разбираемом компилятором.
- Since 4.02
val __POS_OF__ : 'a -> (string * int * int * int) * 'a
__POS_OF__ expr возвращает пару (loc,expr), где loc — кортеж (file,lnum,cnum,enum), соответствующий месту, в котором выражение expr появляется в файле, в данный момент разбираемом компилятором. lnum — номер текущей строки, cnum — позиция символа в строке, а enum — позиция последнего символа в строке.
- Since 4.02
Операторы композиции
val (|>) : 'a -> ('a -> 'b) -> 'b
Оператор обратного применения: x |> f |> g точно эквивалентен g (f (x)). Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
- Since 4.01
val (@@) : ('a -> 'b) -> 'a -> 'b
Оператор применения: g @@ f @@ x точно эквивалентен g (f (x)). Правоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
- Since 4.01
Целочисленная арифметика
Целые числа имеют ширину Sys.int_size бит. Все операции выполняются по модулю 2Sys.int_size. Они не завершаются ошибкой при переполнении.
val (~-) : int -> int
Унарное отрицание. Вы также можете написать - e вместо ~- e. Унарный оператор, см. Ocaml_operators для получения дополнительной информации.
val (~+) : int -> int
Унарное сложение. Вы также можете написать + e вместо ~+ e. Унарный оператор, см. Ocaml_operators для получения дополнительной информации.
- Since 3.12
val succ : int -> int
succ x — x + 1.
val pred : int -> int
pred x — x - 1.
val (+) : int -> int -> int
Целочисленное сложение. Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val (-) : int -> int -> int
Целочисленное вычитание. Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val ( * ) : int -> int -> int
Целочисленное умножение. Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val (/) : int -> int -> int
Целочисленное деление. Целочисленное деление округляет действительное частное своих аргументов к нулю. Более точно, если x >= 0 и y > 0, то x / y — наибольшее целое число, меньшее или равное действительному частному x на y. Кроме того, (- x) / y = x / (- y) = - (x / y). Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
-
Raises
Division_by_zeroесли второй аргумент равен 0.
val (mod) : int -> int -> int
Целочисленный остаток. Если y не равно нулю, результат x mod y удовлетворяет следующим свойствам: x = (x / y) * y + x mod y и abs(x mod y) <= abs(y) - 1. Если y = 0, то x mod y вызывает Division_by_zero. Обратите внимание, что x mod y отрицательно только если x < 0. Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
-
Raises
Division_by_zeroеслиyравно нулю.
val abs : int -> int
abs x — это абсолютное значение x. На min_int это само min_int и, следовательно, остается отрицательным.
val max_int : int
Наибольшее представимое целое число.
val min_int : int
Наименьшее представимое целое число.
Битовые операции
val (land) : int -> int -> int
Битовое логическое и. Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val (lor) : int -> int -> int
Битовое логическое или. Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val (lxor) : int -> int -> int
Битовое логическое исключающее или. Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val lnot : int -> int
Битовое логическое отрицание.
val (lsl) : int -> int -> int
n lsl m сдвигает n влево на m бит. Результат неопределён, если m < 0 или m > Sys.int_size. Правоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val (lsr) : int -> int -> int
n lsr m сдвигает n вправо на m бит. Это логический сдвиг: нули вставляются независимо от знака n. Результат неопределён, если m < 0 или m > Sys.int_size. Правоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val (asr) : int -> int -> int
n asr m сдвигает n вправо на m бит. Это арифметический сдвиг: бит знака n дублируется. Результат неопределён, если m < 0 или m > Sys.int_size. Правоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
Арифметика с плавающей точкой
Числа с плавающей точкой OCaml следуют стандарту IEEE 754, используя числа двойной точности (64 бита). Операции с плавающей точкой никогда не вызывают исключения при переполнении, недополнении, делении на ноль и т. д. Вместо этого возвращаются специальные числа IEEE, как это уместно, такие как infinity для 1.0 /. 0.0, neg_infinity для -1.0 /. 0.0, и nan ('не число') для 0.0 /. 0.0. Эти специальные числа затем распространяются через вычисления с плавающей точкой, как ожидается: например, 1.0 /. infinity — 0.0, основные арифметические операции (+., -., *., /. ) с nan в качестве аргумента возвращают nan, ...
val (~-.) : float -> float
Унарное отрицание. Вы также можете написать -. e вместо ~-. e. Унарный оператор, см. Ocaml_operators для получения дополнительной информации.
val (~+.) : float -> float
Унарное сложение. Вы также можете написать +. e вместо ~+. e. Унарный оператор, см. Ocaml_operators для получения дополнительной информации.
- Since 3.12
val (+.) : float -> float -> float
Сложение чисел с плавающей точкой. Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val (-.) : float -> float -> float
Вычитание чисел с плавающей точкой. Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val ( *. ) : float -> float -> float
Умножение чисел с плавающей точкой. Левоассоциативный оператор, см. Ocaml_operators для получения дополнительной информации.
val (/.) : float -> float -> float
Деление с плавающей точкой. Оператор с левой ассоциативностью, см. Ocaml_operators для получения дополнительной информации.
val ( ** ) : float -> float -> float
Возведение в степень. Оператор с правой ассоциативностью, см. Ocaml_operators для получения дополнительной информации.
val sqrt : float -> float
Квадратный корень.
val exp : float -> float
Экспонента.
val log : float -> float
Натуральный логарифм.
val log10 : float -> float
Десятичный логарифм.
val expm1 : float -> float
expm1 x вычисляет exp x -. 1.0, обеспечивая численно точные результаты даже если x близко к 0.0.
- Since 3.12
val log1p : float -> float
log1p x вычисляет log(1.0 +. x) (натуральный логарифм), обеспечивая численно точные результаты даже если x близко к 0.0.
- Since 3.12
val cos : float -> float
Косинус. Аргумент в радианах.
val sin : float -> float
Синус. Аргумент в радианах.
val tan : float -> float
Тангенс. Аргумент в радианах.
val acos : float -> float
Арккосинус. Аргумент должен находиться в пределах [-1.0, 1.0]. Результат в радианах и находится между 0.0 и pi.
val asin : float -> float
Арксинус. Аргумент должен находиться в пределах [-1.0, 1.0]. Результат в радианах и находится между -pi/2 и pi/2.
val atan : float -> float
Арктангенс. Результат в радианах и находится между -pi/2 и pi/2.
val atan2 : float -> float -> float
atan2 y x возвращает арктангенс y /. x. Знаки x и y используются для определения квадранта результата. Результат в радианах и находится между -pi и pi.
val hypot : float -> float -> float
hypot x y возвращает sqrt(x *. x + y *. y), то есть длину гипотенузы прямоугольного треугольника со сторонами длины x и y, или, эквивалентно, расстояние точки (x,y) до начала координат. Если одно из x или y бесконечно, возвращает infinity, даже если другое равно nan.
- Since 4.00
val cosh : float -> float
Гиперболический косинус. Аргумент в радианах.
val sinh : float -> float
Гиперболический синус. Аргумент в радианах.
val tanh : float -> float
Гиперболический тангенс. Аргумент в радианах.
val acosh : float -> float
Гиперболический арккосинус. Аргумент должен находиться в пределах [1.0, inf]. Результат в радианах и находится между 0.0 и inf.
- Since 4.13
val asinh : float -> float
Гиперболический арксинус. Аргумент и результат охватывают всю вещественную ось. Результат в радианах.
- Since 4.13
val atanh : float -> float
Гиперболический арктангенс. Аргумент должен находиться в пределах [-1.0, 1.0]. Результат в радианах и охватывает всю вещественную ось.
- Since 4.13
val ceil : float -> float
Округление вверх до целого значения. ceil f возвращает наименьшее целое значение, большее или равное f. Результат возвращается как float.
val floor : float -> float
Округление вниз до целого значения. floor f возвращает наибольшее целое значение, меньшее или равное f. Результат возвращается как float.
val abs_float : float -> float
abs_float f возвращает абсолютное значение f.
val copysign : float -> float -> float
copysign x y возвращает float, модуль которого равен модулю x, а знак - знаку y. Если x равно nan, возвращает nan. Если y равно nan, возвращает либо x, либо -. x, но не указано, какой.
- Since 4.00
val mod_float : float -> float -> float
mod_float a b возвращает остаток от деления a на b. Возвращаемое значение равно a -. n *. b, где n - целое значение частного a /. b, округлённое до нуля.
val frexp : float -> float * int
frexp f возвращает пару значащей части и показателя степени числа f. Когда f равно нулю, значащая часть x и показатель степени n числа f равны нулю. Когда f не равно нулю, они определяются по f = x *. 2 ** n и 0.5 <= x < 1.0.
val ldexp : float -> int -> float
ldexp x n возвращает x *. 2 ** n.
val modf : float -> float * float
modf f возвращает пару дробной и целой части f.
val float : int -> float
То же, что float_of_int.
val float_of_int : int -> float
Преобразование целого числа в число с плавающей точкой.
val truncate : float -> int
То же, что int_of_float.
val int_of_float : float -> int
Отображает заданное число с плавающей точкой на целое. Результат не определен, если аргумент равен nan или выходит за пределы диапазона представимых целых чисел.
val infinity : float
Положительная бесконечность.
val neg_infinity : float
Отрицательная бесконечность.
val nan : float
Особое значение числа с плавающей точкой, обозначающее результат неопределённой операции, такой как 0.0 /. 0.0. Обозначает 'не число'. Любая операция с плавающей точкой с аргументом = возвращает nan в качестве результата, если не указано иное в стандарте IEEE 754. Что касается сравнений чисел с плавающей точкой, =, <, <=, > и >= возвращают false, а <> возвращает true, если один или оба из их аргументов равны nan.
nan является тихим NaN с версии 5.1; ранее это был сигнализирующий NaN.
val max_float : float
Наибольшее положительное конечное значение типа float.
val min_float : float
Наименьшее положительное, отличное от нуля, не-денормализованное значение типа float.
val epsilon_float : float
Разница между 1.0 и наименьшим точно представимым числом с плавающей точкой, большим чем 1.0.
type fpclass =
|
| FP_normal
| (* |
Нормальное число, не относящееся к нижеперечисленным |
*) |
|
| FP_subnormal
| (* |
Число очень близко к 0.0, точность уменьшена |
*) |
|
| FP_zero
| (* |
Число равно 0.0 или -0.0 |
*) |
|
| FP_infinite
| (* |
Число равно положительной или отрицательной бесконечности |
*) |
|
| FP_nan
| (* |
Не число: результат неопределённой операции |
*) |
Пять классов чисел с плавающей запятой, определённых функцией classify_float.
val classify_float : float -> fpclass
Возвращает класс данного числа с плавающей запятой: нормальное, подординальное, нулевое, бесконечное или не число.
Операции со строками
Дополнительные операции со строками представлены в модуле String.
val (^) : string -> string -> string
Конкатенация строк. Оператор правоассоциативного типа, см. Ocaml_operators для получения дополнительной информации.
-
Возбуждает
Invalid_argumentесли результат длиннее, чемSys.max_string_lengthбайт.
Операции с символами
Дополнительные операции с символами представлены в модуле Char.
val int_of_char : char -> int
Возвращает код символа ASCII аргумента.
val char_of_int : int -> char
Возвращает символ с заданным кодом ASCII.
-
Возбуждает
Invalid_argumentесли аргумент находится вне диапазона 0--255.
Операции с единицами
val ignore : 'a -> unit
Отбрасывает значение своего аргумента и возвращает (). Например, ignore(f x) отбрасывает результат функции с побочными эффектами f. Это эквивалентно f x; (), за исключением того, что последнее может сгенерировать предупреждение компилятора; написание ignore(f x) вместо этого предотвращает появление предупреждения.
Функции преобразования строк
val string_of_bool : bool -> string
Возвращает строковое представление булева значения. Поскольку возвращаемые значения могут быть совместно используемыми, пользователь не должен изменять их напрямую.
val bool_of_string_opt : string -> bool option
Преобразует заданную строку в булево значение.
Возвращает None если строка не является "true" или "false".
- С 4.05
val bool_of_string : string -> bool
Аналогично bool_of_string_opt, но возбуждает Invalid_argument "bool_of_string" вместо возвращения None.
val string_of_int : int -> string
Возвращает строковое представление целого числа в десятичном формате.
val int_of_string_opt : string -> int option
Преобразует заданную строку в целое число. Строка читается в десятичном формате (по умолчанию или если строка начинается с 0u), в шестнадцатеричном формате (если она начинается с 0x или 0X), в восьмеричном формате (если она начинается с 0o или 0O) или в двоичном формате (если она начинается с 0b или 0B).
Префикс 0u читает входные данные как целое без знака в диапазоне [0, 2*max_int+1]. Если входные данные превышают max_int, они преобразуются в целое число со знаком min_int + input - max_int - 1.
Символ _ (нижнее подчеркивание) может встречаться где угодно в строке и игнорируется.
Возвращает None если заданная строка не является допустимым представлением целого числа или если представляемое целое число выходит за пределы диапазона целых чисел, представляемых типом int.
- С 4.05
val int_of_string : string -> int
Аналогично int_of_string_opt, но возбуждает Failure "int_of_string" вместо возвращения None.
val string_of_float : float -> string
Возвращает строковое представление числа с плавающей запятой.
Это преобразование может привести к потере точности. Для большего контроля над способом вывода числа см. Printf.
val float_of_string_opt : string -> float option
Преобразует заданную строку в число с плавающей запятой. Строка читается в десятичном формате (по умолчанию) или в шестнадцатеричном формате (отмеченном 0x или 0X).
Формат десятичных чисел с плавающей запятой — [-] dd.ddd (e|E) [+|-] dd , где d обозначает десятичную цифру.
Формат шестнадцатеричных чисел с плавающей запятой — [-] 0(x|X) hh.hhh (p|P) [+|-] dd , где h обозначает шестнадцатеричную цифру, а d — десятичную цифру.
В обоих случаях должна быть указана хотя бы одна из целой и дробной частей; часть порядка необязательна.
Символ _ (нижнее подчеркивание) может встречаться где угодно в строке и игнорируется.
В зависимости от платформы выполнения могут приниматься и другие представления чисел с плавающей запятой, но полагаться на них не следует.
Возвращает None если заданная строка не является допустимым представлением числа с плавающей запятой.
- С 4.05
val float_of_string : string -> float
Аналогично float_of_string_opt, но возбуждает Failure "float_of_string" вместо возвращения None.
Операции с парами
val fst : 'a * 'b -> 'a
Возвращает первую компоненту пары.
val snd : 'a * 'b -> 'b
Возвращает вторую компоненту пары.
Операции со списками
Дополнительные операции со списками представлены в модуле List.
val (@) : 'a list -> 'a list -> 'a list
l0 @ l1 добавляет l1 к l0 . Такая же функция, как List.append. Оператор правоассоциативного типа, см. Ocaml_operators для получения дополнительной информации.
- С 5.1 эта функция является рекурсивной по хвосту.
Ввод/вывод
Примечание: все функции ввода/вывода могут возбудить Sys_error при сбое вызываемых системных вызовов.
type in_channel
Тип канала ввода.
type out_channel
Тип канала вывода.
val stdin : in_channel
Стандартный ввод процесса.
val stdout : out_channel
Стандартный вывод процесса.
val stderr : out_channel
Стандартный вывод ошибок процесса.
Функции вывода на стандартный вывод
val print_char : char -> unit
Выводит символ на стандартный вывод.
val print_string : string -> unit
Выводит строку на стандартный вывод.
val print_bytes : bytes -> unit
Выводит последовательность байтов на стандартный вывод.
- С 4.02
val print_int : int -> unit
Выводит целое число в десятичном формате на стандартный вывод.
val print_float : float -> unit
Выводит число с плавающей запятой в десятичном формате на стандартный вывод.
Преобразование числа в строку использует string_of_float и может привести к потере точности.
val print_endline : string -> unit
Выводит строку, за которой следует символ новой строки, на стандартный вывод и сбрасывает стандартный вывод.
val print_newline : unit -> unit
Выводит символ новой строки на стандартный вывод и сбрасывает стандартный вывод. Это может использоваться для имитации буферизации строк стандартного вывода.
Функции вывода на стандартный поток ошибок
val prerr_char : char -> unit
Вывести символ в стандартный поток ошибок.
val prerr_string : string -> unit
Вывести строку в стандартный поток ошибок.
val prerr_bytes : bytes -> unit
Вывести последовательность байтов в стандартный поток ошибок.
- Since 4.02
val prerr_int : int -> unit
Вывести целое число в десятичной форме в стандартный поток ошибок.
val prerr_float : float -> unit
Вывести число с плавающей точкой в десятичной форме в стандартный поток ошибок.
Преобразование числа в строку использует string_of_float и может привести к потере точности.
val prerr_endline : string -> unit
Вывести строку, за которой следует символ новой строки, в стандартный поток ошибок и очистить стандартный поток ошибок.
val prerr_newline : unit -> unit
Вывести символ новой строки в стандартный поток ошибок и очистить стандартный поток ошибок.
Функции ввода со стандартного потока ввода
val read_line : unit -> string
Очистить стандартный поток вывода, затем считать символы со стандартного потока ввода до тех пор, пока не встретится символ новой строки.
Возвращает строку всех прочитанных символов без символа новой строки в конце.
-
Raises
End_of_fileесли в начале строки достигнут конец файла.
val read_int_opt : unit -> int option
Очистить стандартный поток вывода, затем считать одну строку со стандартного потока ввода и преобразовать её в целое число.
Возвращает None если прочитанная строка не является корректным представлением целого числа.
- Since 4.05
val read_int : unit -> int
Аналогично read_int_opt, но вызывает Failure "int_of_string" вместо возвращения None.
val read_float_opt : unit -> float option
Очистить стандартный поток вывода, затем считать одну строку со стандартного потока ввода и преобразовать её в число с плавающей точкой.
Возвращает None если прочитанная строка не является корректным представлением числа с плавающей точкой.
- Since 4.05
val read_float : unit -> float
Аналогично read_float_opt, но вызывает Failure "float_of_string" вместо возвращения None.
Общие функции вывода
type open_flag =
|
| Open_rdonly
| (* |
открытие для чтения. |
*) |
|
| Open_wronly
| (* |
открытие для записи. |
*) |
|
| Open_append
| (* |
открытие для добавления: всегда записывать в конец файла. |
*) |
|
| Open_creat
| (* |
создание файла, если он не существует. |
*) |
|
| Open_trunc
| (* |
очистить файл, если он уже существует. |
*) |
|
| Open_excl
| (* |
ошибка, если Open_creat и файл уже существует. |
*) |
|
| Open_binary
| (* |
открытие в двоичном режиме (без преобразования). |
*) |
|
| Open_text
| (* |
открытие в текстовом режиме (могут выполняться преобразования). |
*) |
|
| Open_nonblock
| (* |
открытие в режиме без блокировки. |
*) |
Режимы открытия для open_out_gen и open_in_gen.
val open_out : string -> out_channel
Открыть указанный файл для записи и вернуть новый канал вывода в этот файл, размещённый в начале файла. Файл усекается до нулевой длины, если он уже существует. Он создаётся, если не существует.
val open_out_bin : string -> out_channel
val open_out_gen : open_flag list -> int -> string -> out_channel
open_out_gen mode perm filename открывает указанный файл для записи, как описано выше. Дополнительный аргумент mode определяет режим открытия. Дополнительный аргумент perm определяет разрешения файла, в случае необходимости создания файла. open_out и open_out_bin являются частными случаями этой функции.
val flush : out_channel -> unit
Очистить буфер, связанный с данным каналом вывода, выполнив все ожидающие записи в этом канале. Интерактивные программы должны быть внимательны к очистке стандартного потока вывода и стандартного потока ошибок в нужное время.
val flush_all : unit -> unit
Очистить все открытые каналы вывода; игнорировать ошибки.
val output_char : out_channel -> char -> unit
Записать символ в данный канал вывода.
val output_string : out_channel -> string -> unit
Записать строку в данный канал вывода.
val output_bytes : out_channel -> bytes -> unit
Записать последовательность байтов в данный канал вывода.
- Since 4.02
val output : out_channel -> bytes -> int -> int -> unit
output oc buf pos len записывает len символов из последовательности байтов buf, начиная со смещения pos, в данный канал вывода oc.
-
Raises
Invalid_argumentеслиposиlenне обозначают допустимый диапазонbuf.
val output_substring : out_channel -> string -> int -> int -> unit
То же, что и output , но вместо последовательности байтов принимает строку в качестве аргумента.
- Since 4.02
val output_byte : out_channel -> int -> unit
Записать одно 8-битовое целое число (как отдельный символ с этим кодом) в данный канал вывода. Заданное целое число берётся по модулю 256.
val output_binary_int : out_channel -> int -> unit
Записать одно целое число в двоичном формате (4 байта, big-endian) в данный канал вывода. Заданное целое число берётся по модулю 232. Единственный надёжный способ его повторного чтения — через функцию input_binary_int. Формат совместим на всех машинах для данной версии OCaml.
val output_value : out_channel -> 'a -> unit
Записать представление структурированного значения любого типа в канал. Цикличность и совместное использование внутри значения обнаруживаются и сохраняются. Объект можно прочитать обратно с помощью функции input_value. Дополнительную информацию см. в описании модуля Marshal. output_value эквивалентно Marshal.to_channel со списком флагов, равным пустому.
val seek_out : out_channel -> int -> unit
seek_out chan pos устанавливает текущую позицию записи в pos для канала chan. Это работает только для обычных файлов. В файлах других типов (например, терминалы, каналы и сокеты) поведение не определено.
val pos_out : out_channel -> int
Возвращает текущую позицию записи для данного канала. Не работает с каналами, открытыми с флагом Open_append (возвращает неопределенные результаты). Для файлов, открытых в текстовом режиме в Windows, возвращаемая позиция является приблизительной (из-за преобразования конца строки); в частности, сохранение текущей позиции с помощью pos_out, а затем возврат к этой позиции с помощью seek_out не будет работать. Для того, чтобы этот фрагмент кода работал надежно и переносимо, файл должен быть открыт в двоичном режиме.
val out_channel_length : out_channel -> int
Возвращает размер (количество символов) обычного файла, на котором открыт данный канал. Если канал открыт на файле, который не является обычным файлом, результат бессмысленный.
val close_out : out_channel -> unit
Закрывает данный канал, сбрасывая все буферизованные операции записи. Функции вывода генерируют исключение Sys_error при применении к закрытому выходному каналу, за исключением close_out и flush, которые ничего не делают при применении к уже закрытому каналу. Обратите внимание, что close_out может вызвать Sys_error если операционная система сообщит об ошибке при сбросе или закрытии.
val close_out_noerr : out_channel -> unit
То же, что и close_out, но игнорирует все ошибки.
val set_binary_mode_out : out_channel -> bool -> unit
set_binary_mode_out oc true устанавливает канал oc в двоичный режим: никакие преобразования не выполняются во время вывода. set_binary_mode_out oc false устанавливает канал oc в текстовый режим: в зависимости от операционной системы, некоторые преобразования могут выполняться во время вывода. Например, в Windows концы строк будут преобразованы из \n в \r\n. Эта функция не имеет эффекта в операционных системах, не различающих текстовый и двоичный режимы.
Общие функции ввода
val open_in : string -> in_channel
Открыть указанный файл для чтения и вернуть новый входной канал на этот файл, помещенный в начало файла.
val open_in_bin : string -> in_channel
val open_in_gen : open_flag list -> int -> string -> in_channel
open_in_gen mode perm filename открывает указанный файл для чтения, как описано выше. Дополнительные аргументы mode и perm указывают режим открытия и разрешения на файл. open_in и open_in_bin являются частными случаями этой функции.
val input_char : in_channel -> char
Прочитать один символ из данного входного канала.
-
Возбуждает
End_of_fileесли больше нет символов для чтения.
val input_line : in_channel -> string
Считывает символы из данного входного канала, пока не встретится символ новой строки. Возвращает строку всех прочитанных символов без символа новой строки в конце.
-
Возбуждает
End_of_fileесли конец файла достигнут в начале строки.
val input : in_channel -> bytes -> int -> int -> int
input ic buf pos len считывает до len символов из данного канала ic, сохраняя их в последовательности байтов buf, начиная с номера символа pos. Возвращает фактическое количество прочитанных символов, от 0 до len (включительно). Значение 0 означает, что конец файла достигнут. Возвращаемое значение от 0 до len означает, что не все запрошенные len символы были прочитаны, либо потому, что больше символов не было доступно в этот момент, либо потому, что реализация сочла целесообразным произвести частичное чтение; input должен быть вызван снова, чтобы прочитать оставшиеся символы, если это необходимо. (См. также really_input для чтения ровно len символов.) Исключение Invalid_argument "input" возникает, если pos и len не обозначают допустимый диапазон buf.
val really_input : in_channel -> bytes -> int -> int -> unit
really_input ic buf pos len считывает len символов из канала ic, сохраняя их в последовательности байтов buf, начиная с номера символа pos.
-
Возбуждает
-
End_of_fileесли конец файла достигнут до того, как было прочитаноlenсимволов. -
Invalid_argumentеслиposиlenне обозначают допустимый диапазонbuf.
-
val really_input_string : in_channel -> int -> string
really_input_string ic len считывает len символов из канала ic и возвращает их в новой строке.
- Since 4.02
-
Возбуждает
End_of_fileесли конец файла достигнут до того, как было прочитаноlenсимволов.
val input_byte : in_channel -> int
То же, что и input_char, но возвращает 8-битовое целое число, представляющее символ.
-
Возбуждает
End_of_fileесли конец файла достигнут.
val input_binary_int : in_channel -> int
Считывает целое число в двоичном формате (4 байта, big-endian) из данного входного канала. См. output_binary_int.
-
Возбуждает
End_of_fileесли конец файла достигнут во время чтения целого числа.
val input_value : in_channel -> 'a
Считывает представление структурированного значения, созданного с помощью output_value, и возвращает соответствующее значение. Эта функция идентична Marshal.from_channel; см. описание модуля Marshal для получения дополнительной информации, в частности, относительно отсутствия безопасности типов.
val seek_in : in_channel -> int -> unit
seek_in chan pos устанавливает текущую позицию чтения в pos для канала chan. Это работает только для обычных файлов. В файлах других типов поведение не определено.
val pos_in : in_channel -> int
Возвращает текущую позицию чтения для данного канала. Для файлов, открытых в текстовом режиме в Windows, возвращаемая позиция является приблизительной (из-за преобразования конца строки); в частности, сохранение текущей позиции с помощью pos_in, а затем возврат к этой позиции с помощью seek_in не будет работать. Для того, чтобы этот фрагмент кода работал надежно и переносимо, файл должен быть открыт в двоичном режиме.
val in_channel_length : in_channel -> int
Возвращает размер (количество символов) обычного файла, на котором открыт данный канал. Если канал открыт на файле, который не является обычным файлом, результат бессмысленный. Возвращаемый размер не учитывает преобразования конца строки, которые могут выполняться при чтении из канала, открытого в текстовом режиме.
val close_in : in_channel -> unit
Закрывает данный канал. Функции ввода генерируют исключение Sys_error при применении к закрытому входному каналу, за исключением close_in, которая ничего не делает при применении к уже закрытому каналу.
val close_in_noerr : in_channel -> unit
То же, что и close_in, но игнорирует все ошибки.
val set_binary_mode_in : in_channel -> bool -> unit
set_binary_mode_in ic true устанавливает канал ic в двоичный режим: никакие преобразования не выполняются во время ввода. set_binary_mode_out ic false устанавливает канал ic в текстовый режим: в зависимости от операционной системы, некоторые преобразования могут выполняться во время ввода. Например, в Windows концы строк будут преобразованы из \r\n в \n. Эта функция не имеет эффекта в операционных системах, не различающих текстовый и двоичный режимы.
Операции с большими файлами
module LargeFile: sig .. end
Операции с большими файлами.
Ссылки
type 'a ref = {
mutable contents :
|
} Тип ссылок (изменяемые ссылки-ячейки) содержащие значение типа 'a.
val ref : 'a -> 'a ref
Возвращает свежую ссылку, содержащую заданное значение.
val (!) : 'a ref -> 'a
!r возвращает текущее содержимое ссылки r. Эквивалентно fun r -> r.contents. Унарный оператор, см. Ocaml_operators для получения дополнительной информации.
val (:=) : 'a ref -> 'a -> unit
r := a сохраняет значение a в ссылке r. Эквивалентно fun r v -> r.contents <- v. Оператор с правоассоциативностью, см. Ocaml_operators для получения дополнительной информации.
val incr : int ref -> unit
Увеличивает целое число, содержащееся в данной ссылке. Эквивалентно fun r -> r := succ !r.
val decr : int ref -> unit
Уменьшает целое число, содержащееся в данной ссылке. Эквивалентно fun r -> r := pred !r.
Тип результата
type ('a, 'b) result =
|
| Ok of
|
|
| Error of
|
- Since 4.03
Операции с форматовыми строками
Форматные строки — это строковые значения с особыми лексическими правилами, определяющими функциональность функций форматированного ввода/вывода. Форматные строки используются для чтения данных с помощью функций форматированного ввода из модуля Scanf и для вывода данных с помощью функций форматированного вывода из модулей Printf и Format.
Форматные строки состоят из трёх типов сущностей:
-
спецификации преобразования, начинающиеся со специального символа
'%'и сопровождающиеся одним или несколькими символами, определяющими тип аргумента для чтения или вывода, -
форматирующие указания, начинающиеся со специального символа
'@'и сопровождающиеся одним или несколькими символами, определяющими способ чтения или вывода аргумента, - обычные символы, представляющие собой обычные символы с обычными лексическими правилами. Обычные символы определяют строковые литералы, которые будут читаться из входных данных или выводиться на выходе.
Существует дополнительное лексическое правило для экранирования специальных символов '%' и '@' в форматных строках: если специальный символ следует за символом '%', он обрабатывается как обычный символ. Другими словами, "%%" считается обычным '%' и "%@" как обычный '@'.
Для получения более подробной информации о доступных спецификациях преобразования и форматирующих указаниях, обратитесь к документации модулей Scanf, Printf и Format.
Форматные строки имеют общий и высокополиморфный тип ('a, 'b, 'c, 'd, 'e, 'f) format6. Два упрощенных типа, format и format4 ниже, включены для обеспечения обратной совместимости с более ранними версиями OCaml.
Значение параметров типа форматной строки таковы:
-
'a— тип параметров формата для функций форматированного вывода (функции типаprintf);'a— тип значений, считываемых форматом для функций форматированного ввода (функции типаscanf).
-
'b— тип источника ввода для функций форматированного ввода и тип целевого вывода для функций форматированного вывода. Для функций типаprintfиз модуляPrintf,'bобычно равенout_channel; для функций типаprintfиз модуляFormat,'bобычно равенFormat.formatter; для функций типаscanfиз модуляScanf,'bобычно равенScanf.Scanning.in_channel.
Аргумент типа 'b также является типом первого аргумента, переданного пользовательским функциям вывода для преобразований %a и %t, и пользовательским функциям чтения для преобразования %r.
-
'c— тип результата функций вывода%aи%t, а также тип аргумента, передаваемого в первый аргумент функций типаkprintfили функциям типаkscanf.
-
'd— тип параметров для функций типаscanf.
-
'e— тип функции-приёмника для функций типаscanf.
-
'f— конечный тип результата вызова функции форматированного ввода/вывода: для функций типаprintfон обычно равенunit; для функций типаscanfон обычно равен типу результата функции-приёмника.
type ('a, 'b, 'c, 'd, 'e, 'f) format6 = ('a, 'b, 'c, 'd, 'e, 'f) CamlinternalFormatBasics.format6 type ('a, 'b, 'c, 'd) format4 = ('a, 'b, 'c, 'c, 'c, 'd) format6 type ('a, 'b, 'c) format = ('a, 'b, 'c, 'c) format4 val string_of_format : ('a, 'b, 'c, 'd, 'e, 'f) format6 -> string
Преобразует форматную строку в строку.
val format_of_string : ('a, 'b, 'c, 'd, 'e, 'f) format6 -> ('a, 'b, 'c, 'd, 'e, 'f) format6
format_of_string s возвращает форматную строку, прочитанную из строкового литерала s. Примечание: format_of_string не может преобразовать строковый аргумент, который не является литералом. Если вам нужна такая функциональность, используйте более общую функцию Scanf.format_from_string.
val (^^) : ('a, 'b, 'c, 'd, 'e, 'f) format6 -> ('f, 'b, 'c, 'e, 'g, 'h) format6 -> ('a, 'b, 'c, 'd, 'g, 'h) format6
f1 ^^ f2 конкатенирует форматные строки f1 и f2. Результат — форматная строка, которая ведет себя как конкатенация форматных строк f1 и f2: в случае форматированного вывода она принимает аргументы из f1, а затем аргументы из f2; в случае форматированного ввода она возвращает результаты из f1, а затем результаты из f2 Правая ассоциативность, см. Ocaml_operators для получения дополнительной информации.
Завершение программы
val exit : int -> 'a
Завершает процесс, возвращая заданный код состояния операционной системе: обычно 0 для указания отсутствия ошибок и небольшое положительное целое число для указания сбоя. Все открытые каналы вывода сбрасываются с помощью flush_all. Вызываются обратные вызовы, зарегистрированные с помощью Domain.at_exit, за которыми следуют обратные вызовы, зарегистрированные с помощью at_exit.
Неявное exit 0 выполняется каждый раз, когда программа завершается нормально. Неявное exit 2 выполняется, если программа завершается преждевременно из-за неперехваченного исключения.
val at_exit : (unit -> unit) -> unit
Регистрирует заданную функцию для вызова в момент завершения программы. Функции, зарегистрированные с помощью at_exit будут вызваны, когда программа выполняет любое из следующих действий:
- выполняет
exit - завершается, либо нормально, либо из-за неперехваченного исключения
- выполняет C-функцию
caml_shutdown. Функции вызываются в порядке «последний вошедший, первый вышедший»: функция, добавленная с помощьюat_exitв последнюю очередь, вызывается первой.
Модули стандартной библиотеки
module Arg: Arg
module Array: Array
module ArrayLabels: ArrayLabels
module Atomic: Atomic
module Bigarray: Bigarray
module Bool: Bool
module Buffer: Buffer
module Bytes: Bytes
module BytesLabels: BytesLabels
module Callback: Callback
module Char: Char
module Complex: Complex
module Condition: Condition
module Digest: Digest
module Domain: Domain
module Dynarray: Dynarray
module Effect: Effect
module Either: Either
module Ephemeron: Ephemeron
module Filename: Filename
module Float: Float
module Format: Format
module Fun: Fun
module Gc: Gc
module Hashtbl: Hashtbl
module In_channel: In_channel
module Int: Int
module Int32: Int32
module Int64: Int64
module Lazy: Lazy
module Lexing: Lexing
module List: List
module ListLabels: ListLabels
module Map: Map
module Marshal: Marshal
module MoreLabels: MoreLabels
module Mutex: Mutex
module Nativeint: Nativeint
module Obj: Obj
module Oo: Oo
module Option: Option
module Out_channel: Out_channel
module Parsing: Parsing
module Printexc: Printexc
module Printf: Printf
module Queue: Queue
module Random: Random
module Result: Result
module Scanf: Scanf
module Semaphore: Semaphore
module Seq: Seq
module Set: Set
module Stack: Stack
module StdLabels: StdLabels
module String: String
module StringLabels: StringLabels
module Sys: Sys
module Type: Type
module Uchar: Uchar
module Unit: Unit
module Weak: Weak
© 1995-2024 INRIA.
https://ocaml.org/manual/5.2/api/Stdlib.html