Module Pervasives


module Pervasives: sig  end
初期状態で open されているモジュールです。

このモジュールはビルトイン型 (数字、真偽値、文字列、例外、reference 、リスト、配列、入出力チャンネルなどなど) をに対する基本的な処理を提供します。

このモジュールはコンパイルのはじめに自動的に開かれます。なのでこのモジュールの内容物には Pervasives で始めず、そのままの名前で参照できます。




Exceptions


val raise : exn -> 'a
与えられた例外を発生します。
val invalid_arg : string -> 'a
例外 Invalid_argument を与えられた文字列で生成して発生します。
val failwith : string -> 'a
例外 Failure を与えられた文字列で生成して発生します。
exception Exit
例外 Exit はライブラリからは発生しません。あなたのプログラムで発生してください。


Comparisons


val (=) : 'a -> 'a -> bool
e1 = e2e1e2 とが構造的に等価かどうか検査します。 書き換え可能な構造 (例えば reference や配列) は現在の内容物まで構造的に等しい時のみに限り等しいことになります。2 つの書き換え可能なオブジェクトは物理的に等価でなくても構いません。関数値の比較を行うと例外 Invalid_argument を発生します。循環構造の比較を行うと評価が停止しないかもしれません。
val (<>) : 'a -> 'a -> bool
Pervasives.(=) の否定。
val (<) : 'a -> 'a -> bool
Pervasives.(>=) を見てください。
val (>) : 'a -> 'a -> bool
Pervasives.(>=) を見てください。
val (<=) : 'a -> 'a -> bool
Pervasives.(>=) を見てください。
val (>=) : 'a -> 'a -> bool
構造的順序付け関数です。これらの関数は整数、文字、文字列、浮動小数点小数などの通常の順序を返し、それを拡張してあらゆる型の完全な順序付けを行います。順序付けは (=) と互換性があります。(=) の場合と同じように、書き換え可能なデータは内容物で比較されます。関数値の比較を行うと例外 Invalid_argument を発生します。循環構造の比較を行うと評価が停止しないかもしれません。
val compare : 'a -> 'a -> int
compare x yx=y のとき 0 を、x<y のとき負の整数を、x>y のとき正の整数を返します。= を適用するときと同じ制限があります。compare は比較関数として functor Set.MakeMap.Make で使うことができます。
val min : 'a -> 'a -> 'a
2 つの引数の小さい方を返します。
val max : 'a -> 'a -> 'a
2 つの引数の大きい方を返します。
val (==) : 'a -> 'a -> bool
e1 == e2e1e2 の物理的に等価かどうか検査します。整数と文字に関しては、物理的透過性と構造的透過性は一致します。書き換え可能な構造に関しては、仮に e1 を書き換えたとしたら、それが e2 にも影響する場合に限り等価であるとします。書き換え可能でない構造に関しては、(==) の動作は実装依存ですが、e1 == e2 が成り立つならば e1 = e2 が成り立つことは保証されています。
val (!=) : 'a -> 'a -> bool
Pervasives.(==) の否定。


Boolean operations


val not : bool -> bool
真偽値の否定。
val (&&) : bool -> bool -> bool
真偽値の「and」です。評価は順に左から右へと行われます。e1 && e2 なら、まず e1 が評価され、それが false を返した場合は e2 は評価されません。
val (&) : bool -> bool -> bool
c 代わりに Pervasives.(&&) を使ってください。
val (||) : bool -> bool -> bool
真偽値の「or」です。評価は順に左から右へと行われます。e1 || e2 なら、まず e1 が評価され、それが true を返した場合は e2 は評価されません。
val or : bool -> bool -> bool
e2 代わりに Pervasives.(||) を使ってください。


Integer arithmetic



整数のビット幅は 32 ビット (64 ビットプロセッサの場合は 63 ビット) です。計算はすべて 231 (または 263) を法とした計算になります。オーバーフローを起こしても失敗はしません。

val (~-) : int -> int
単項否定。~-e と書く代わりに -e と書くこともできます。
val succ : int -> int
succ xx+1 です。
val pred : int -> int
pred xx-1 です。
val (+) : int -> int -> int
整数加算。
val (-) : int -> int -> int
整数減算。
val (*) : int -> int -> int
整数乗算。
val (/) : int -> int -> int
整数除算。第二引数が 0 の場合は例外 Division_by_zero が発生します。実数商は 0 方向に丸められます。すなわち、x >= 0 かつ y > 0 のとき、x / yxy で割った実数値と等しいか、それを超えない最大の整数になります。さらに、(-x) / y = x / (-y) = -(x / y) が成り立ちます。
val mod : int -> int -> int
整数剰余。y が 0 でない場合、x mod yx = (x / y) * y + x mod y かつ abs(x mod y) < abs(y) を満たします。y = 0 の場合、x mod yDivision_by_zero を発生します。x < 0 の時のみに限り、x mod y は負になることに注意してください。
val abs : int -> int
引数の絶対値を返します。
val max_int : int
整数型がとりうる最大の値。
val min_int : int
整数型がとりうる最小の値。


Bitwise operations


val land : int -> int -> int
ビット論理積。
val lor : int -> int -> int
ビット論理和。
val lxor : int -> int -> int
ビット排他的論理和。
val lnot : int -> int
ビット論理否定。
val lsl : int -> int -> int
n lsl mn を左に m ビットシフトします。m < 0 または m >= bitsize のとき結果は規定されていません (bitsize は 32 ビットプラットフォームでは 32 、64 ビットプラットフォームでは 64)。
val lsr : int -> int -> int
n lsr mn を右に m ビットシフトします。 これは論理シフトです。新しく空いた上位ビットには n の符号ではなく常に 0 が入ります。 m < 0 または m >= bitsize のときは結果は規定されていません。
val asr : int -> int -> int
n asr mn を右に m ビットシフトします。 これは算術シフトです。新しく空いた上位ビットには n の符号ビットが挿入されます。 m < 0 または m >= bitsize のとき結果は規定されていません。


Floating-point arithmetic

Caml の浮動小数点小数は IEEE 754 標準に準拠した double 精度 (64 ビット) の浮動小数点小数です。浮動小数点演算ではオーバーフロー、アンダーフロー、0 除算などの例外は発生しません。その代わり適当な IEEE の特別な数値を返します。たとえば 1.0 /. 0.0infinity を、-1.0 /. 0.0neg_infinity を、0.0 /. 0.0 には nan (``not a number'') を返します。これらの特別な数値を演算に適用するとおよそ期待通りの結果を返します。たとえば 1.0 /. infinity0.0 を、nan に関する計算はすべて nan を返します。

val (~-.) : float -> float
単項否定。~-.e と書く代わりに -.e と書くこともできます。
val (+.) : float -> float -> float
浮動小数点加算。
val (-.) : float -> float -> float
浮動小数点減算。
val (*.) : float -> float -> float
浮動小数点乗算。
val (/.) : float -> float -> float
浮動小数点除算。
val (**) : float -> float -> float
累乗。
val sqrt : float -> float
平方根。
val exp : float -> float
指数関数。
val log : float -> float
自然対数。
val log10 : float -> float
常用対数。
val cos : float -> float
Pervasives.atan2 を見てください。
val sin : float -> float
Pervasives.atan2 を見てください。
val tan : float -> float
Pervasives.atan2 を見てください。
val acos : float -> float
Pervasives.atan2 を見てください。
val asin : float -> float
Pervasives.atan2 を見てください。
val atan : float -> float
Pervasives.atan2 を見てください。
val atan2 : float -> float -> float
通常の三角関数です。
val cosh : float -> float
Pervasives.tanh を見てください。
val sinh : float -> float
Pervasives.tanh を見てください。
val tanh : float -> float
通常のハイパーボリック三角関数です。
val ceil : float -> float
Pervasives.floor を見てください。
val floor : float -> float
与えられた浮動小数点小数を整数値に丸めます。 floor ff と同じかそれを超えない最大の整数値を返します。 ceil ff と同じかそれを下回らない最小の整数値を返します。
val abs_float : float -> float
引数の絶対値を返します。
val mod_float : float -> float -> float
mod_float a bab で割った余りを返します。つまり返される値は a -. n *. b です (na /. b の値を 0 方向に丸めた整数) 。
val frexp : float -> float * int
frexp ff の指数部と仮数部のペアを返します。f が 0 のときは、指数部 n も仮数部 x も 0 になります。f が 0 でないときは、f = x *. 2 ** n かつ 0.5 <= x < 1.0 を満たすものになります。
val ldexp : float -> int -> float
ldexp x nx *. 2 ** n を返します。
val modf : float -> float * float
modf ff の整数部分と小数部分のペアを帰します。
val float : int -> float
Pervasives.float_of_int と同じです。
val float_of_int : int -> float
整数を浮動小数点小数に変換します。
val truncate : float -> int
Pervasives.int_of_float と同じです。
val int_of_float : float -> int
浮動小数点小数を切り捨てて整数にします。その数が整数の表せる範囲を外れていた場合、結果は規定されていません。
val infinity : float
正の無限大。
val neg_infinity : float
負の無限大。
val nan : float
0.0 /. 0.0 のように定義されない処理を行ったことを示す特別な浮動小数点小数値です。``not a number'' を表します。
val max_float : float
float 型が表す値で、有限範囲内にある正の最大の数。
val min_float : float
float 型が表す値で、有限範囲内にある正の最小の非正規化数。
val epsilon_float : float
1.0 +. x <> 1.0 を満たす、正の最小の x

type fpclass =
| FP_normal (*Normal number, none of the below*)
| FP_subnormal (*Number very close to 0.0, has reduced precision*)
| FP_zero (*Number is 0.0 or -0.0*)
| FP_infinite (*Number is positive or negative infinity*)
| FP_nan (*Not a number: result of an undefined operation*)
浮動小数点小数の 5 つのクラスです。関数 Pervasives.classify_float で分類されます。

val classify_float : float -> fpclass
与えられた浮動小数点小数のクラスを返します。正規化数、非正規仮数、0 、無限大、not a number です。


String operations

文字列処理はこれ以外にもモジュール String にあります。

val (^) : string -> string -> string
文字列結合。


Character operations

文字列処理はこれ以外にもモジュール Char にあります。

val int_of_char : char -> int
引数の ASCII コードを返します。
val char_of_int : int -> char
与えられた引数を ASCII コードに持つ文字を返します。
引数が 0--255 の範囲外だったら例外 Invalid_argument "char_of_int" を発生します。


Unit operations


val ignore : 'a -> unit
引数の値を捨てて () を返します。 たとえば、ignore(f x) は副作用のある関数 f の評価結果を捨てます。 f x; () と等価ですが、後者の場合コンパイラが警告を出します。代わりに ignore(f x) と書けば警告は出ません。


String conversion functions


val string_of_bool : bool -> string
真偽値を文字列表現して返します。
val bool_of_string : string -> bool
文字列を真偽値に変換して返します。"true""false" 以外の文字列には例外 Invalid_argument "bool_of_string" を発生します。
val string_of_int : int -> string
整数を 10 進表示して返します。
val int_of_string : string -> int
文字列を整数に変換します。文字列は (デフォルトで) 10 進として解釈されます。文字列 0x0o0b で始まっている場合はそれぞれ 16 進、8 進、2 進として解釈されます。文字列が整数を表す文字列として不正であった場合は、例外 Failure "int_of_string" を発生します。
val string_of_float : float -> string
浮動小数点小数を文字列表示して返します。
val float_of_string : string -> float
文字列を浮動小数点小数を変換します。文字列が浮動小数点小数を表す文字列として不正であった場合は Failure "float_of_string" を返します。


Pair operations


val fst : 'a * 'b -> 'a
ペアの 1 つ目の中身を返します。
val snd : 'a * 'b -> 'b
ペアの 2 つ目の中身を返します。


List operations

リスト処理はこれ以外にもモジュール List にあります。

val (@) : 'a list -> 'a list -> 'a list
リストの結合。


Input/output



type in_channel
入力チャンネルの型。


type out_channel
出力チャンネルの型。

val stdin : in_channel
プロセスの標準入力。
val stdout : out_channel
プロセスの標準出力。
val stderr : out_channel
プロセスの標準エラー出力。


Output functions on standard output


val print_char : char -> unit
標準出力に文字を表示します。
val print_string : string -> unit
標準出力に文字列を表示します。
val print_int : int -> unit
標準出力に整数を 10 進で表示します。
val print_float : float -> unit
標準出力に浮動小数点小数を 10 進で表示します。
val print_endline : string -> unit
標準出力に文字列を改行付きで表示します。
val print_newline : unit -> unit
標準出力に改行をで表示して、標準出力をフラッシュします。標準出力の行バッファの中身を書き出させるのに使います。


Output functions on standard error


val prerr_char : char -> unit
標準エラー出力に文字を表示します。
val prerr_string : string -> unit
標準エラー出力に文字列を表示します。
val prerr_int : int -> unit
標準エラー出力に整数を 10 進で表示します。
val prerr_float : float -> unit
標準エラー出力に浮動小数点小数を 10 進で表示します。
val prerr_endline : string -> unit
標準エラー出力に文字列を改行付きで表示します。
val prerr_newline : unit -> unit
標準エラー出力に改行をで表示して、標準出力をフラッシュします。


Input functions on standard input


val read_line : unit -> string
標準出力をフラッシュして、標準入力から改行文字までの文字を読み込みます。読み込んだ文字を、最後の改行以外、文字列にして返します。
val read_int : unit -> int
標準出力をフラッシュして、標準入力から 1 行読み込んで整数に変換して返します。その行が整数を表す文字列として不正であった場合は例外 Failure "int_of_string" を発生します。
val read_float : unit -> float
標準出力をフラッシュして、標準入力から 1 行読み込んで浮動小数点小数に変換して返します。その行が浮動小数点小数を表す文字列として不正であった場合は結果は規定されていません。


General output functions



type open_flag =
| Open_rdonly (*open for reading.*)
| Open_wronly (*open for writing.*)
| Open_append (*open for appending: always write at end of file.*)
| Open_creat (*create the file if it does not exist.*)
| Open_trunc (*empty the file if it already exists.*)
| Open_excl (*fail if the file already exists.*)
| Open_binary (*open in binary mode (no conversion).*)
| Open_text (*open in text mode (may perform conversions).*)
| Open_nonblock (*open in non-blocking mode.*)
Pervasives.open_out_genPervasives.open_in_gen で使うオープンモード。

val open_out : string -> out_channel
指定された名前のファイルを書き込みモードで開いて、その新しい出力チャンネルを返します。書き込み位置はファイル先頭になっています。ファイルがすでに存在した場合は長さ 0 に切り捨てます。ファイルが存在しなかった場合は作成します。ファイルを開けなかったら例外 Sys_error を発生します。
val open_out_bin : string -> out_channel
Pervasives.open_out と同じですが、ファイルをバイナリモードで開きます。書き込みの最中にいっさいの変換が起こりません。テキストモードとバイナリモードを区別しない OS では、この関数は Pervasives.open_out と同じ動作をします。
val open_out_gen : open_flag list -> int -> string -> out_channel
指定された名前のファイルを書き込みモードで開きます。引数 mode が追加されていて、オープンモードを指定するのに使います。引数 perm も追加されていて、ファイルを作成する場合、パーミッションを指定するのに使います。Pervasives.open_outPervasives.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 : out_channel -> string -> int -> int -> unit
output oc buf pos len は出力チャンネル oc に、文字列 bufpos 文字目から len 文字を書き込みます。 poslenbuf の部分文字列指定として不正であった場合は例外 Invalid_argument "output" を発生します。
val output_byte : out_channel -> int -> unit
与えられた出力チャンネルに 8 ビット整数を 1 文字 (そのコードが表す文字) を書き出します。与えられた整数は 256 で割った余りをとられます。
val output_binary_int : out_channel -> int -> unit
与えられた出力チャンネルに整数をバイナリ表記で書き出します。これをきちんと読み込むには関数 Pervasives.input_binary_int を使ってください。このフォーマットは Objective Caml のすべてのバージョンで互換性があります。
val output_value : out_channel -> 'a -> unit
チャンネルに任意型の値の構造を文字列表現して書き出します。内部に循環や共有がある構造もきちんとそのまま保存されます。このオブジェクトを読み戻すには関数 Pervasives.input_value を使ってください。詳しくはモジュール Marshal を見てください。Pervasives.output_valueMarshal.to_channel のフラグに空リストを与えたものと同値です。
val seek_out : out_channel -> int -> unit
seek_out chan pos はチャンネル chan の現在の書き込み位置を pos に設定します。これは通常のファイルに対してのみきちんと動作します。ファイル以外のもの (端末、パイプ、ソケットなど) に対して行うと、動作は規定されません。
val pos_out : out_channel -> int
与えられたチャンネルの現在の書き込み位置を返します。
val out_channel_length : out_channel -> int
与えられたチャンネルの全長を文字数で返します。これは通常のファイルに対してのみきちんと動作します。ファイル以外のものに対して行っても、結果は意味を持ちません。
val close_out : out_channel -> unit
与えられたチャンネルを閉じて、書き込み処理バッファをフラッシュします。 閉じられたチャンネルを出力関数に適用すると例外 Sys_error が発生します。ただし close_outflush だけは特別で、閉じられたチャンネルを適用しても何もしません。
val set_binary_mode_out : out_channel -> bool -> unit
set_binary_mode_out oc true はチャンネル oc をバイナリモードに設定します。出力中にいっさいの変換を行いません。 set_binary_mode_out oc false はチャンネル oc をテキストモードに設定します。OS 依存で、何らかの変換が起こるかも知れません。たとえば Windows では、end-of-line が \n から \r\n に変換されます。テキストモードとバイナリモードを区別しない OS では、この関数は何も行いません。


General input functions


val open_in : string -> in_channel
指定された名前のファイルを読み込みモードで開いて、その新しい入力チャンネルを返します。読み込み位置はファイル先頭になっています。ファイルを開けなかったら例外 Sys_error を発生します。
val open_in_bin : string -> in_channel
Pervasives.open_in と同じですが、ファイルをバイナリモードで開きます。読み込みの最中にいっさいの変換が起こりません。テキストモードとバイナリモードを区別しない OS では、この関数は Pervasives.open_in と同じ動作をします。
val open_in_gen : open_flag list -> int -> string -> in_channel
指定された名前のファイルを読み込みモードで開きます。引数 modeperm が追加されていて、オープンモードとパーミッションを指定するのに使います。Pervasives.open_inPervasives.open_in_bin はこの関数の特殊な場合です。
val input_char : in_channel -> char
与えられたチャンネルから文字を 1 文字読み込みます。読み込む文字が 1 文字も残っていなければ例外 End_of_file を発生します。
val input_line : in_channel -> string
与えられたチャンネルから改行文字までの文字を読み込みます。読み込んだ文字を、最後の改行以外、文字列にして返します。読み込む文字が 1 文字も残っていなければ例外 End_of_file を発生します。
val input : in_channel -> string -> int -> int -> int
input ic buf pos len reads up to len は入力チャンネル ic から文字を読み、文字列 bufpos 文字目の位置から読んだ文字を書き込みます。実際に読み込んだ文字数を返します。0 から len までです (len を含む) 。返値が 0 なのは、ファイル終端に至ったと言うことです。返値が 0 から len (len は含まない) なのは、要求された len 文字は読まなかったということです。考えられる要因は、その時点でそれ以上の文字が読み込めなかったか、部分的に読み込んだ方が好都合だと実装が判断したかです。もし残った文字を読みたかったら、再度 input を呼び出してください (きっかり len 文字読み込む関数 Pervasives.really_input も見てください) 。poslenbuf の部分文字列指定として不正であった場合は例外 Invalid_argument "input" を発生します。
val really_input : in_channel -> string -> int -> int -> unit
really_input ic buf pos len reads len はチャンネル ic から文字を読み、文字列 bufpos 文字目の位置から読んだ文字を書き込みます。len 文字読み終わる前にファイル終端に至ったら例外 End_of_file を発生します。poslenbuf の部分文字列指定として不正であった場合は例外 Invalid_argument "input" を発生します。
val input_byte : in_channel -> int
Pervasives.input_char と同じですが、こちらはその文字を表す 8 ビット整数を返します。ファイル終端に至っていたら例外 End_of_file を発生します。
val input_binary_int : in_channel -> int
与えられた入力チャンネルからバイナリフォーマットでエンコードされた整数を読み込みます。Pervasives.output_binary_int を見てください。読み込み中にファイル終端に至ったら例外 End_of_file を発生します。
val input_value : in_channel -> 'a
Pervasives.output_value で生成した、値の構造を文字列表現したものを読み込み、対応する値を返します。この関数は Marshal.from_channel と同じです。詳しくはモジュール Marshal を見てください。特に型の安全性がなくなることに注意してください。
val seek_in : in_channel -> int -> unit
seek_in chan pos はチャンネル chan の現在の読み込み位置を pos に設定します。これは通常のファイルに対してのみきちんと動作します。ファイル以外のものに対して行うと、動作は規定されません。
val pos_in : in_channel -> int
与えられたチャンネルの現在の読み込み位置を返します。
val in_channel_length : in_channel -> int
与えられたチャンネルの全長を文字数で返します。これは通常のファイルに対してのみきちんと動作します。ファイル以外のモノに対して行っても、結果は意味を持ちません。
val close_in : in_channel -> unit
与えられたチャンネルを閉じます。閉じられたチャンネルを入力関数に適用すると例外 Sys_error が発生します。ただし 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 をテキストモードに設定します。OS 依存で、何らかの変換が起こるかも知れません。たとえば Windows では、end-of-line が \r\n から \n に変換されます。テキストモードとバイナリモードを区別しない OS では、この関数は何も行いません。


Operations on large files


module LargeFile: sig  end
大きなファイルに対する操作です。


References



type 'a ref = {
   mutable contents : 'a;
}
'a の値を持つ reference (書き換え可能な間接セル) の型。

val ref : 'a -> 'a ref
与えられた値を持つ新しい reference を返します。
val (!) : 'a ref -> 'a
!r は reference r が今持っている値を返します。 fun r -> r.contents と等価です。
val (:=) : 'a ref -> 'a -> unit
r := a は reference r に値 a を持たせます。 fun r v -> r.contents <- v と等価です。
val incr : int ref -> unit
整数を持つ reference の中身を 1 足します。 fun r -> r := succ !r と等価です。
val decr : int ref -> unit
整数を持つ reference の中身を 1 引きます。 fun r -> r := pred !r と等価です。


Program termination


val exit : int -> 'a
プロセスを終了します。与えられたステータスコードが OS に返されます。通常 0 が正常終了を、小さい正の数が異常終了を意味します。すべての出力チャンネルがフラッシュされます。プログラムが正常に終了した場合は暗黙のうちに exit 0 が行われたことになります。。プログラムがキャッチされない例外で早期に終了した場合は暗黙のうちに exit 2 が行われたことになります。
val at_exit : (unit -> unit) -> unit
与えられた関数を、プログラム終了時に呼び出す関数として登録します。at_exit で登録された関数はプログラムが Pervasives.exit を実行するか、正常終了なりキャッチされない例外なりで終了するときに呼び出されます。この関数は「後入れ先出し」の順で呼び出されます。at_exit で最後に追加した関数は、最初に呼び出されます。