Pervasives

このページは最後に更新されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

last mod. 2009-09-10 (木) 13:54:58

Chapter 19 基本的なライブラリ

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 = e2 は e1 と e2 とが構造的に等価かどうか検査します。 書き換え可能な構造 (例えば 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 y は x=y のとき 0 を、x<y のとき負の整数を、x>y のとき正の整数を返します。= を適用するときと同じ制限があります。 compare は比較関数として functor Set.Make や Map.Make で使うことができます。

val min : 'a -> 'a -> 'a

2 つの引数の小さい方を返します。

val max : 'a -> 'a -> 'a

2 つの引数の大きい方を返します。

val (==) : 'a -> 'a -> bool

e1 == e2 は e1 と e2 の物理的に等価かどうか検査します。整数と文字に関しては、物理的透過性と構造的透過性は一致します。書き換え可能な構造に関しては、仮に 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

非推奨。Pervasives.(&&) を使ってください。

val (||) : bool -> bool -> bool

真偽値の「or」です。評価は順に左から右へと行われます。e1 || e2 なら、まず e1 が評価され、それが true を返した場合は e2 は評価されません。

val or : bool -> bool -> bool

非推奨。Pervasives.(||) を使ってください。

Integer arithmetic

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

val (~-) : int -> int

単項否定。~-e と書く代わりに -e と書くこともできます。

val succ : int -> int

succ x は x+1 です。

val pred : int -> int

pred x は x-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 / y は x を y で割った実数値と等しいか、それを超えない最大の整数になります。さらに、(-x) / y = x / (-y) = -(x / y) が成り立ちます。

val mod : int -> int -> int

整数剰余。y が 0 でない場合、x mod y は x = (x / y) * y + x mod y かつ abs(x mod y) < abs(y) を満たします。y = 0 の場合、x mod y は Division_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 m は n を左に m ビットシフトします。m < 0 または m >= bitsize のとき結果は規定されていません (bitsize は 32 ビットプラットフォームでは 32 、64 ビットプラットフォームでは 64)。

val lsr : int -> int -> int

n lsr m は n を右に m ビットシフトします。 これは論理シフトです。新しく空いた上位ビットには n の符号ではなく常に 0 が入ります。 m < 0 または m >= bitsize のときは結果は規定されていません。

val asr : int -> int -> int

n asr m は n を右に m ビットシフトします。 これは算術シフトです。新しく空いた上位ビットには n の符号ビットが挿入されます。 m < 0 または m >= bitsize のとき結果は規定されていません。

Floating-point arithmetic

Caml の浮動小数点小数は IEEE 754 標準に準拠した double 精度 (64 ビット) の浮動小数点小数です。浮動小数点演算ではオーバーフロー、アンダーフロー、0 除算などの例外は発生しません。その代わり適当な IEEE の特別な数値を返します。たとえば 1.0 /. 0.0 は infinity を、-1.0 /. 0.0 は neg_infinity を、0.0 /. 0.0 には nan (``not a number'') を返します。これらの特別な数値を演算に適用するとおよそ期待通りの結果を返します。たとえば 1.0 /. infinity は 0.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 f は f と同じかそれを超えない最大の整数値を返します。 ceil f は f と同じかそれを下回らない最小の整数値を返します。

val abs_float : float -> float

引数の絶対値を返します。

val mod_float : float -> float -> float

mod_float a b は a を b で割った余りを返します。つまり返される値は a -. n *. b です (n は a /. b の値を 0 方向に丸めた整数) 。

val frexp : float -> float * int

frexp f は f の指数部と仮数部のペアを返します。f が 0 のときは、指数部 n も仮数部 x も 0 になります。f が 0 でないときは、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

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 進として解釈されます。文字列 0x 、0o 、0b で始まっている場合はそれぞれ 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_gen や Pervasives.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_out とPervasives.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 に、文字列 buf の pos 文字目から len 文字を書き込みます。 pos と len が buf の部分文字列指定として不正であった場合は例外 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_value は Marshal.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_out と flush だけは特別で、閉じられたチャンネルを適用しても何もしません。

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

指定された名前のファイルを読み込みモードで開きます。引数 mode と perm が追加されていて、オープンモードとパーミッションを指定するのに使います。Pervasives.open_in と Pervasives.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 から文字を読み、文字列 buf の pos 文字目の位置から読んだ文字を書き込みます。実際に読み込んだ文字数を返します。0 から len までです (len を含む) 。返値が 0 なのは、ファイル終端に至ったと言うことです。返値が 0 から len (len は含まない) なのは、要求された len 文字は読まなかったということです。考えられる要因は、その時点でそれ以上の文字が読み込めなかったか、部分的に読み込んだ方が好都合だと実装が判断したかです。もし残った文字を読みたかったら、再度 input を呼び出してください (きっかり len 文字読み込む関数 Pervasives.really_input も見てください) 。pos と len が buf の部分文字列指定として不正であった場合は例外 Invalid_argument "input" を発生します。

val really_input : in_channel -> string -> int -> int -> unit

really_input ic buf pos len reads len はチャンネル ic から文字を読み、文字列 buf の pos 文字目の位置から読んだ文字を書き込みます。len 文字読み終わる前にファイル終端に至ったら例外 End_of_file を発生します。pos と len が buf の部分文字列指定として不正であった場合は例外 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 で最後に追加した関数は、最初に呼び出されます。

新規 編集 添付