module Pervasives: sig end
このモジュールはビルトイン型 (数字、真偽値、文字列、例外、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
val max : 'a -> 'a -> 'a
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
e1 && e2
なら、まず e1
が評価され、それが false
を返した場合は e2
は評価されません。val (&) : bool -> bool -> bool
val (||) : bool -> bool -> bool
e1 || e2
なら、まず e1
が評価され、それが true
を返した場合は e2
は評価されません。val or : bool -> bool -> bool
Integer arithmetic
|
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
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 | *) |
Pervasives.classify_float
で分類されます。val classify_float : float -> fpclass
String operations
|
文字列処理はこれ以外にもモジュール String
にあります。
val (^) : string -> string -> string
Character operations
|
文字列処理はこれ以外にもモジュール Char
にあります。
val int_of_char : char -> int
val char_of_int : int -> char
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
val int_of_string : string -> int
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
val snd : 'a * 'b -> 'b
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
val print_float : float -> unit
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
val prerr_float : float -> unit
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
Failure "int_of_string"
を発生します。val read_float : unit -> float
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. | *) |
val open_out : string -> out_channel
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
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
End_of_file
を発生します。val input_line : in_channel -> string
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
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
の値を持つ reference (書き換え可能な間接セル) の型。val ref : 'a -> 'a ref
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
fun r -> r := succ !r
と等価です。val decr : int ref -> unit
fun r -> r := pred !r
と等価です。
Program termination
|
val exit : int -> 'a
exit 0
が行われたことになります。。プログラムがキャッチされない例外で早期に終了した場合は暗黙のうちに exit 2
が行われたことになります。val at_exit : (unit -> unit) -> unit
at_exit
で登録された関数はプログラムが Pervasives.exit
を実行するか、正常終了なりキャッチされない例外なりで終了するときに呼び出されます。この関数は「後入れ先出し」の順で呼び出されます。at_exit
で最後に追加した関数は、最初に呼び出されます。