Модуль Stdlib
module Stdlib: sig .. end
Стандартная библиотека OCaml.
Этот модуль автоматически открывается в начале каждой компиляции. Поэтому ко всем компонентам этого модуля можно обращаться по короткому имени, не указывая перед ним Stdlib.
В частности, он предоставляет основные операции над встроенными типами (числами, логическими значениями, последовательностями байтов, строками, исключениями, ссылками, списками, массивами, каналами ввода-вывода и т. д.), а также модули стандартной библиотеки.
Исключения
val raise : exn -> 'a
Вызывает указанное значение исключения
val raise_notrace : exn -> 'a
Более быстрая версия raise, которая не сохраняет трассировку стека.
- Начиная с версии 4.02
val invalid_arg : string -> 'a
Вызывает исключение Invalid_argument с указанной строкой.
val failwith : string -> 'a
Вызывает исключение Failure с указанной строкой.
exception Exit
Исключение Exit не вызывается ни одной библиотечной функцией. Оно предоставлено для использования в ваших программах.
exception Match_failure of (string * int * int)
Исключение, вызываемое, если ни один из вариантов сопоставления с образцом не подходит. Аргументы указывают местоположение ключевого слова сопоставления в исходном коде (имя файла, номер строки, номер столбца).
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
Псевдоним для Repr.equal. Левоассоциативный оператор; дополнительную информацию см. в разделе Ocaml_operators.
val (<>) : 'a -> 'a -> bool
Отрицание Repr.equal. Левоассоциативный оператор; дополнительную информацию см. в разделе Ocaml_operators.
val (<) : 'a -> 'a -> bool
См. (>=). Левоассоциативный оператор; дополнительную информацию см. в разделе Ocaml_operators.
val (>) : 'a -> 'a -> bool
См. (>=). Левоассоциативный оператор; дополнительную информацию см. в разделе Ocaml_operators.
val (<=) : 'a -> 'a -> bool
См. (>=). Левоассоциативный оператор; дополнительную информацию см. в разделе Ocaml_operators.
val (>=) : 'a -> 'a -> bool
Функции структурного упорядочения. Эти функции совпадают с обычными отношениями порядка для целых чисел, символов, строк, последовательностей байтов и чисел с плавающей точкой и распространяют их на полный порядок для всех типов. Этот порядок совместим с Repr.equal. Как и в случае с Repr.equal, изменяемые структуры сравниваются по содержимому. Сравнение функциональных значений вызывает Invalid_argument. Сравнение циклических структур может не завершиться. Левоассоциативный оператор; дополнительную информацию см. в разделе Ocaml_operators.
val compare : 'a -> 'a -> int
Псевдоним для Repr.compare.
val min : 'a -> 'a -> 'a
Псевдоним для Repr.min.
val max : 'a -> 'a -> 'a
Псевдоним для Repr.max.
val (==) : 'a -> 'a -> bool
Псевдоним для Repr.phys_equal. Левоассоциативный оператор; дополнительную информацию см. в разделе Ocaml_operators.
val (!=) : 'a -> 'a -> bool
Отрицание Repr.phys_equal. Левоассоциативный оператор; дополнительную информацию см. в разделе 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: "File %S, line %d, characters %d-%d".
- Начиная с версии 4.02
val __FILE__ : string
__FILE__ возвращает имя файла, который в данный момент обрабатывается компилятором.
- Начиная с версии 4.02
val __LINE__ : int
__LINE__ возвращает номер строки, в которой находится это выражение в файле, обрабатываемом в данный момент компилятором.
- Начиная с версии 4.02
val __MODULE__ : string
__MODULE__ возвращает имя модуля файла, обрабатываемого компилятором.
- Начиная с версии 4.02
val __POS__ : string * int * int * int
__POS__ возвращает кортеж (file,lnum,cnum,enum), соответствующий местоположению этого выражения в файле, обрабатываемом в данный момент компилятором. file — текущее имя файла, lnum — номер строки, cnum — позиция символа в строке, а enum — позиция последнего символа в строке.
- Начиная с версии 4.02
val __FUNCTION__ : string
__FUNCTION__ возвращает строку вида "N0n1n2...", где N0 — имя текущей единицы компиляции, а ni — имена вложенных областей видимости, ведущих к месту вызова. Каждая область видимости имеет одну из следующих форм:
-
.n, еслиn— имя определения функции, модуля, класса или значения, либо -
#n, еслиn— имя метода, либо -
.(fun), если область видимости соответствует анонимной функции.
Обратите внимание, что точный формат может измениться в будущем.
- Начиная с версии 4.12
val __LOC_OF__ : 'a -> string * 'a
__LOC_OF__ expr возвращает пару (loc, expr), где loc — местоположение expr в файле, обрабатываемом в данный момент компилятором, в стандартном формате сообщений об ошибках OCaml: "File %S, line %d, characters %d-%d".
- Начиная с версии 4.02
val __LINE_OF__ : 'a -> int * 'a
__LINE_OF__ expr возвращает пару (line, expr), где line — номер строки, в которой выражение expr находится в файле, обрабатываемом в данный момент компилятором.
- Начиная с версии 4.02
val __POS_OF__ : 'a -> (string * int * int * int) * 'a
__POS_OF__ expr возвращает пару (loc,expr), где loc — кортеж (file,lnum,cnum,enum), соответствующий местоположению выражения expr в файле, обрабатываемом в данный момент компилятором. file — текущее имя файла, lnum — номер строки, cnum — позиция символа в строке, а enum — позиция последнего символа в строке.
- Начиная с версии 4.02
Операторы композиции
val (|>) : 'a -> ('a -> 'b) -> 'b
Оператор применения в обратном порядке: x |> f |> g полностью эквивалентно g (f (x)). Левоассоциативный оператор; дополнительную информацию см. в разделе Ocaml_operators.
- Начиная с версии 4.01
val (@@) : ('a -> 'b) -> 'a -> 'b
Оператор применения: g @@ f @@ x полностью эквивалентно g (f (x)). Правоассоциативный оператор; дополнительную информацию см. в разделе Ocaml_operators.
- Начиная с версии 4.01
Целочисленная арифметика
Ширина целых чисел в OCaml составляет Sys.int_size бит. Все операции выполняются по модулю 2Sys.int_size. Переполнение не вызывает ошибок.
val (~-) : int -> int
Унарное отрицание. Вместо ~- e можно также записать - e. Унарный оператор; дополнительную информацию см. в разделе Ocaml_operators.
val (~+) : int -> int
Унарное сложение. Вместо ~+ e можно также записать + e. Унарный оператор; дополнительную информацию см. в разделе Ocaml_operators.
- Начиная с версии 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.
-
Вызывает исключение
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.
-
Вызывает исключение
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.
- Начиная с версии 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.
- Начиная с версии 3.12
val log1p : float -> float
log1p x вычисляет log(1.0 +. x) (натуральный логарифм), обеспечивая численно точный результат, даже если x близко к 0.0.
- Начиная с версии 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.
- Начиная с версии 4.00
val cosh : float -> float
Гиперболический косинус.
val sinh : float -> float
Гиперболический синус.
val tanh : float -> float
Гиперболический тангенс.
val acosh : float -> float
Гиперболический арккосинус. Аргумент должен находиться в диапазоне [1.0, inf]. Результат выражен в радианах и находится между 0.0 и inf.
- Начиная с версии 4.13
val asinh : float -> float
Гиперболический арксинус. Аргумент и результат могут принимать любые вещественные значения. Результат выражен в радианах.
- Начиная с версии 4.13
val atanh : float -> float
Гиперболический арктангенс. Аргумент должен находиться в диапазоне [-1.0, 1.0]. Результат выражен в радианах и может принимать любое вещественное значение.
- Начиная с версии 4.13
val ceil : float -> float
Округление вверх до целого значения. ceil f возвращает наименьшее целое значение, большее или равное f. Результат возвращается в виде числа с плавающей точкой.
val floor : float -> float
Округление вниз до целого значения. floor f возвращает наибольшее целое значение, меньшее или равное f. Результат возвращается в виде числа с плавающей точкой.
val abs_float : float -> float
abs_float f возвращает абсолютное значение f.
val copysign : float -> float -> float
copysign x y возвращает число с плавающей точкой, модуль которого равен модулю x, а знак — знаку y. Если x равно nan, возвращает nan. Если y равно nan, возвращает либо x, либо -. x; конкретный вариант не определён.
- Начиная с версии 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 <= abs 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 является аргументом, возвращает в качестве результата nan, если иное не указано стандартом IEEE 754. Для сравнений чисел с плавающей точкой операции =, <, <=, > и >= возвращают false, а <> возвращает true, если один или оба аргумента равны nan.
Начиная с версии 5.1, nan является тихим NaN; до этого он был сигнальным 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
Выводит последовательность байтов в стандартный поток ошибок.
- Начиная с версии 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
Очищает буфер стандартного вывода, затем считывает символы из стандартного ввода до символа новой строки.
Возвращает строку из всех считанных символов без завершающего символа новой строки.
-
Вызывает исключение
End_of_file, если конец файла достигнут в начале строки.
val read_int_opt : unit -> int option
Очищает буфер стандартного вывода, затем считывает строку из стандартного ввода и преобразует её в целое число.
Возвращает None, если считанная строка не является допустимым представлением целого числа.
- Начиная с версии 4.05
val read_int : unit -> int
То же, что и read_int_opt, но вызывает исключение Failure "int_of_string" вместо возврата None.
val read_float_opt : unit -> float option
Очищает буфер стандартного вывода, затем считывает строку из стандартного ввода и преобразует её в число с плавающей точкой.
Возвращает None, если считанная строка не является допустимым представлением числа с плавающей точкой.
- Начиная с версии 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
Записывает последовательность байтов в заданный канал вывода.
- Начиная с версии 4.02
val output : out_channel -> bytes -> int -> int -> unit
output oc buf pos len записывает len символов из последовательности байтов buf, начиная со смещения pos, в заданный канал вывода oc.
-
Вызывает исключение
Invalid_argument, еслиposиlenне задают допустимый диапазон вbuf.
val output_substring : out_channel -> string -> int -> int -> unit
То же, что и output, но принимает строку вместо последовательности байтов.
- Начиная с версии 4.02
val output_byte : out_channel -> int -> unit
Записывает одно 8-битное целое число (как единственный символ с этим кодом) в заданный канал вывода. Заданное целое число берётся по модулю 256.
val output_binary_int : out_channel -> int -> unit
Записывает одно целое число в двоичном формате (4 байта, порядок байтов от старшего к младшему) в заданный канал вывода. Заданное целое число берётся по модулю 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 ещё раз. (Для чтения ровно len символов см. также really_input.) Исключение 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 и возвращает их в виде новой строки.
- Начиная с версии 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 байта, порядок байтов от старшего к младшему), из заданного канала ввода. См. 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 Pqueue: Pqueue
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 Iarray: Iarray
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 Pair: Pair
module Parsing: Parsing
module Printexc: Printexc
module Printf: Printf
module Queue: Queue
module Random: Random
module Result: Result
module Repr: Repr
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-2026 INRIA.
https://ocaml.org/manual/5.5/api/Stdlib.html