Модуль Stdlib
module Stdlib: sig .. end
Стандартная библиотека OCaml.
Этот модуль автоматически открывается в начале каждой компиляции. Все компоненты этого модуля могут поэтому ссылаться на их короткое имя, без префикса Stdlib.
В частности, он предоставляет основные операции над встроенными типами (числа, булевы значения, байтовые последовательности, строки, исключения, ссылки, списки, массивы, каналы ввода-вывода, ...) и модули стандартной библиотеки.
Исключения
val raise : exn -> 'a
Вызвать заданное исключение.
val raise_notrace : exn -> 'a
Более быстрая версия raise, которая не записывает трассировку стека.
- Since 4.02.0
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 , совместим с предикатами сравнения =, < и > , определёнными выше, с одним отличием в обработке значения float nan. Иными словами, предикаты сравнения рассматривают nan как отличное от любого другого значения float, включая себя; в то время как compare рассматривает nan как равное самому себе и меньшее любого другого значения float. Эта обработка 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.0
val __FILE__ : string
__FILE__ возвращает имя файла, который в настоящее время обрабатывается компилятором.
- Since 4.02.0
val __LINE__ : int
Возвращает номер строки, в которой данное выражение появляется в файле, в данный момент парсируемом компилятором.
- Since 4.02.0
val __MODULE__ : string
Возвращает имя модуля файла, в данный момент парсируемого компилятором.
- Since 4.02.0
val __POS__ : string * int * int * int
Возвращает кортеж (file,lnum,cnum,enum), соответствующий расположению данного выражения в файле, в данный момент парсируемом компилятором. lnum — номер строки, cnum — позиция символа в строке, enum — последняя позиция символа в строке.
- Since 4.02.0
val __FUNCTION__ : string
Возвращает имя текущей функции или метода, включая любые содержащие модули или классы.
- Since 4.12.0
val __LOC_OF__ : 'a -> string * 'a
Возвращает пару (loc, expr), где loc — расположение expr в файле, в данный момент парсируемом компилятором, с форматом стандартной ошибки OCaml: "Файл %S, строка %d, символы %d-%d".
- Since 4.02.0
val __LINE_OF__ : 'a -> int * 'a
Возвращает пару (line, expr), где line — номер строки, в которой выражение expr появляется в файле, в данный момент парсируемом компилятором.
- Since 4.02.0
val __POS_OF__ : 'a -> (string * int * int * int) * 'a
Возвращает пару (loc,expr), где (file,lnum,cnum,enum) — кортеж, соответствующий расположению выражения expr в файле, в данный момент парсируемом компилятором. lnum — текущий имя файла, cnum — позиция символа в строке, enum — последняя позиция символа в строке.
- Since 4.02.0
Операторы композиции
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.0
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 для получения дополнительной информации.
- Since 3.12.0
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
Логарифм по основанию 10.
val expm1 : float -> float
expm1 x вычисляет exp x -. 1.0, обеспечивая точные результаты даже если x близко к 0.0.
- Since 3.12.0
val log1p : float -> float
log1p x вычисляет log(1.0 +. x) (натуральный логарифм), обеспечивая точные результаты даже если x близко к 0.0.
- Since 3.12.0
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.0
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.0
val asinh : float -> float
Гиперболический обратный синус. Аргумент и диапазон результата охватывают всю вещественную прямую. Результат в радианах.
- Since 4.13.0
val atanh : float -> float
Гиперболический обратный тангенс. Аргумент должен находиться в диапазоне [-1.0, 1.0]. Результат в радианах и охватывает всю вещественную прямую.
- Since 4.13.0
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, но не указано, какое именно.
- Since 4.00.0
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 в качестве аргумента, возвращает nan в качестве результата. Что касается сравнения с плавающей точкой, =, <, <=, > и >= возвращают false, а <> возвращает true, если один или оба их аргумента равны 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, но вместо возвращения None вызывает исключение Invalid_argument "bool_of_string".
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.
- Since 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 если заданная строка не является корректным представлением числа с плавающей точкой.
- Since 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
Конкатенация списков. Не является хвостово-рекурсивной (длина первого аргумента). Оператор правоассоциативный, см. Ocaml_operators для получения дополнительной информации.
Ввод/вывод
Примечание: все функции ввода/вывода могут вызвать 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
Вывод последовательности байтов на стандартный вывод.
- Since 4.02.0
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.0
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.0
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.0
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.0
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.0
-
Возбуждает
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.0
Операции с форматированными строками
Форматные строки — это строковые значения с особыми лексическими соглашениями, определяющими функциональность функций форматированного ввода/вывода. Форматные строки используются для чтения данных с помощью функций форматированного ввода из модуля Scanf и для вывода данных с помощью функций форматированного вывода из модулей Printf и Format.
Форматные строки состоят из трёх типов сущностей:
-
спецификации преобразования, вводимые специальным символом
'%', за которым следует один или более символов, указывающих на тип аргумента для чтения или вывода, -
указания форматирования, вводимые специальным символом
'@', за которым следует один или более символов, указывающих на способ чтения или вывода аргумента, - обычные символы, которые являются обычными символами с обычными лексическими соглашениями. Обычные символы определяют строковые литералы, которые должны быть прочитаны из входных данных или выведены на выходе.
Существует дополнительное лексическое правило для экранирования специальных символов '%' и '@' в строках формата: если специальный символ следует за символом '%', он обрабатывается как обычный символ. Другими словами, "%%" рассматривается как обычный '%', а "%@" как обычный '@'.
Для получения дополнительной информации о доступных спецификациях преобразования и указаниях форматирования прочитайте документацию модулей Scanf, Printf и Format.
Форматные строки имеют общий и высокополиморфный тип ('a, 'b, 'c, 'd, 'e, 'f) format6. Для обратной совместимости с более ранними версиями OCaml включены два упрощенных типа: format и format4.
Значение параметров типа форматной строки таково:
-
'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 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 Uchar: Uchar
module Unit: Unit
module Weak: Weak
© 1995-2022 INRIA.
https://v2.ocaml.org/releases/5.0/htmlman/libref/Stdlib.html