Spec-Zone.ru › OCaml

Модуль 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

То же, что и open_out, но файл открывается в двоичном режиме, поэтому при записи преобразование не выполняется. В операционных системах, не различающих текстовый и двоичный режимы, эта функция работает как open_out.

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

То же, что и open_in, но файл открывается в двоичном режиме, поэтому при чтении преобразование не выполняется. В операционных системах, не различающих текстовый и двоичный режимы, эта функция работает как open_in.

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;
}

Тип ссылок (изменяемых ячеек косвенной адресации), содержащих значение типа '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 'a
| Error of 'b
  • 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API