module Pervasives:初期状態でsig..end
open されているモジュール
このモジュールは(数値、真偽値、文字列、例外、リファレンス、リスト、配列、入出力チャネルといった)組み込みの型に対する基本的な演算を提供しています。
このモジュールはコンパイルを始めるときに毎回自動的に open されます。
したがって、このモジュールの構成要素はすべて、 Pervasives をつけずに参照することができます。
val raise : exn -> 'aval invalid_arg : string -> 'aInvalid_argument 例外を送出します。val failwith : string -> 'aFailure 例外を送出します。exception Exit
Exit 例外を発生させるライブラリ関数はありません。
ユーザープログラムで使うために提供されている例外です。val (=) : 'a -> 'a -> boole1 = e2 は e1 と e2 の構造的等価性を検査します。
(リファレンスや配列といった)変更可能な構造は、
ふたつのオブジェクトが物理的に同一のオブジェクトでなくても、
それぞれの現在の内容が構造的に等価であるとき、かつそのときに限り、等価と見做されます。
関数値同士を比較すると Invalid_argument 例外が発生します。
循環構造を持つデータ構造同士の比較は停止しないかもしれません。val (<>) : 'a -> 'a -> bool(=) の否定ですval (<) : 'a -> 'a -> bool(>=) を参照val (>) : 'a -> 'a -> bool(>=) を参照val (<=) : 'a -> 'a -> bool(>=) を参照val (>=) : 'a -> 'a -> bool( = ) と互換性があります。
( = ) の場合と同じく、変更可能な構造は、その要素により比較されます。
関数値同士の比較をすると Invalid_argument 例外が発生します。
循環構造の比較をすると停止しないかもしれません。val compare : 'a -> 'a -> intx と y が等しい場合 compare x y は 0 を返し、 x が y より小さいときには負の整数、より大きいときには正の整数を返します。
compare による順序は、上で定義した比較述語 =、 <、 > と互換性がありますが、ただひとつ、浮動小数点値 nan の扱いだけが異なります。
比較述語では、 nan をそれ自身を含むすべての浮動小数点値を異なるものとして扱いますが、それに対して compare では nan は自身と等しいものとし、他の如何なる浮動小数点値よりも小さいものとして扱います。
nan をこのように扱うことで compare 関数が全順序を定義することを保証しています。
compare を関数値に適用すると Invalid_argument 例外が発生します。
循環構造に適用すると停止しないかもしれません。
compare 関数は Set.Make や Map.Make ファンクタ、 List.sort 関数や Array.sort 関数で要求される比較関数として使うことができます。
val min : 'a -> 'a -> 'anan であった場合の結果は規定されていません。val max : 'a -> 'a -> 'anan であった場合の結果は規定されていません。val (==) : 'a -> 'a -> boole1 == e2 は e1 と e2 の物理的等価性を検査します。
リファレンスや配列、文字列、変更可能なフィールドのあるレコードや変更可能なインスタンス変数のあるオブジェクトといった変更可能な型については、 e1 に対する物理的変更が e2 にも影響を与える場合、かつその場合にかぎり e1 == e2 は真になります。
変更不能な型については ( == ) の結果は処理系依存になります。ただし、 e1 == e2 であれば compare e1 e2 = 0 となることは保証されます。val (!=) : 'a -> 'a -> bool(==) の否定。val not : bool -> boolval (&&) : bool -> bool -> boole1 && e2 は、まず e1 を評価し、それが false を返した場合には e2 はまったく評価されません。val (&) : bool -> bool -> bool
val (||) : bool -> bool -> boole1 || e2 は、まず e1 を評価し、それが true を返した場合には e2 はまったく評価されません。val (or) : bool -> bool -> bool
val (~-) : int -> int~-e の代わりに - e と書くこともできます。val (~+) : int -> int~+e の代わりに + e と書くこともできます。val succ : int -> intsucc x は x + 1 になります。val pred : int -> intpred x は x - 1 になります。val (+) : int -> int -> intval (-) : int -> int -> intval ( * ) : int -> int -> intval (/) : int -> int -> intDivision_by_zero 例外が発生します。
整数の除算では、実際の商を零方向に丸めます。
より精確に言うと、 x >= 0 かつ y > 0 のとき、 x / y は x と y の実際の商以下の最大の整数になります。
さらに、 (- x) / y = x / (- y) = - (x / y) になります。val (mod) : int -> int -> inty が 0 でないとき、 x mod y の結果は
x = (x / y) * y + x mod y かつ abs(x mod y) <= abs(y) - 1 という性質を満たします。
y = 0 のときは Division_by_zero 例外が発生します。
x mod y は x < 0 のときだけ負になることに注意してください。val abs : int -> intmin_int のとき負の数が返ることがあることに注意してください。val max_int : intval min_int : intval (land) : int -> int -> intval (lor) : int -> int -> intval (lxor) : int -> int -> intval lnot : int -> intval (lsl) : int -> int -> intn lsl m は n を左に m ビットシフトします。
m < 0 ないしは m >= bitsize のときの結果は規定されていません。
ここで、 bitsize は 32 ビット環境では 32、 64 ビット環境では 64 になります。val (lsr) : int -> int -> intn lsr m は n を右に m ビットシフトします。
これは論理シフトで、 n の符号によらず 0 が挿入されます。
m < 0 ないしは m >= bitsize のときの結果は規定されていません。val (asr) : int -> int -> intn asr m は n を右に m ビットシフトします。
これは算術シフトで、 n の符号ビットが複製されます。
m < 0 ないしは m >= bitsize のときの結果は規定されていません。
Caml の浮動小数点数は IEEE 754 標準の(64 ビット)倍精度数です。
浮動小数点演算はオーバーフローやアンダーフロー、零除算時に例外を発生させません。
代わりに、 1.0 /. 0.0 には infinitiy、 -1.0 /. 0.0 には neg_infinity、
0.0 /. 0.0 には nan (非数 -- ``not a number'')といった、特別な IEEE
数値を返します。これらの数値は、浮動小数点演算により、およそ想像通りに波及していきます。
例えば 1.0 /. infinity は 0.0 になり、 nan を引数とした任意算術演算は結果として nan を返します。
val (~-.) : float -> float~-. e の代わりに -. e と書くこともできます。val (~+.) : float -> float~+. e の代わりに +. e と書くこともできます。val (+.) : float -> float -> floatval (-.) : float -> float -> floatval ( *. ) : float -> float -> floatval (/.) : float -> float -> floatval ( ** ) : float -> float -> floatval sqrt : float -> floatval exp : float -> floatval log : float -> floatval log10 : float -> floatval expm1 : float -> floatexpm1 x は exp x -. 10 を計算します。
x が 0.0 に近いときでも精確な結果を返します。val log1p : float -> floatlog1p x は log(1.0 +. x) (自然対数)を返します。
x が 0.0 に近いときでも精確な結果を返します。val cos : float -> floatval sin : float -> floatval tan : float -> floatval acos : float -> float[-1.0, 1.0] になければなりません。
結果は 0.0 から pi までのラジアン角になります。val asin : float -> float[-1.0, 1.0] になければなりません。
結果は 0.0 から pi までのラジアン角になります。val atan : float -> float-pi/2 から pi/2 までのラジアン角になります。val atan2 : float -> float -> floatatan y x は y /. x の逆正接を返します。
x と y の符号が結果の象限を決めるのに使われます。
結果は -pi から pi までのラジアン角になります。val cosh : float -> floatval sinh : float -> floatval tanh : float -> floatval ceil : float -> floatceil f は f 以上の最小の整数を返します。結果は浮動小数点数として返ります。val floor : float -> floatfloor f は f 以下の最大の整数を返します。結果は浮動小数点数として返ります。val abs_float : float -> floatabs_float f は f の絶対値を返します。val mod_float : float -> float -> floatmod_float a b は a を b で割った余りを返します。
n を商 a /. b を零方向に丸めた整数とすると、戻り値は a -. n *. b になります。val frexp : float -> float * intfrexp f は f の仮数部と指数部のペアを返します。
f が 0 のとき、 f の仮数部 x と指数部 n は 0 になります。
f が 0 でないときは、 f = x *. 2 ** n と 0.5 <= x < 1.0 により定義されます。val ldexp : float -> int -> floatldexp x n は x *. 2 ** n を返します。val modf : float -> float * floatmodf は f の小数部と整数部のペアを返します。val float : int -> floatfloat_of_int と同じです。val float_of_int : int -> floatval truncate : float -> intint_of_float と同じです。val int_of_float : float -> intnan である場合や、表現可能な整数の範囲を越えた場合の結果は規定されていません。val infinity : floatval neg_infinity : floatval nan : float0.0 /. 0.0 のような未定義の演算の結果を表す浮動小数点値です。
非数(``not a number'')を意味します。
nan に対する浮動小数点演算はすべて nan を返します。
比較に関しては、引数の一方ないしは両方が nan のとき、
=、 <、 <=、 >、 >= は false を返し、 <> は true を返します。val max_float : floatfloat 型で最大の有限の値。val min_float : floatfloat 型で、零でない正の非正規化された最小の値。val epsilon_float : float1.0 より大きくかつ浮動小数点数として精確に表せる最小の値と 1.0 との差。type fpclass =
| |
FP_normal |
(* | 下記以外の通常の数である | *) |
| |
FP_subnormal |
(* | 数値が 0.0 に非常に近く、精度が低くなっている | *) |
| |
FP_zero |
(* | 数が 0.0 ないしは -0.0 である | *) |
| |
FP_infinite |
(* | 数が正/負の無限大である | *) |
| |
FP_nan |
(* | 数ではない(Not a Number -- nan である)。未定義の演算の結果である | *) |
classify_float 関数により特定された浮動小数点数の種別。val classify_float : float -> fpclass
String モジュールでより多くの文字列演算が提供されています。
val (^) : string -> string -> string
Char モジュールでより多くの文字演算が提供されています。
val int_of_char : char -> intval char_of_int : int -> charInvalid_argument "char_of_int" が発生します。val ignore : 'a -> unit() を返します。
例えば ignore(f x) は副作用のある関数 f の結果を捨てます。
これは f x; () と等価ですが、こちらはコンパイラが警告を表示するかもしれません。
代わりに ignore(f x) と書くと警告を避けることができます。val string_of_bool : bool -> stringval bool_of_string : string -> bool"true" か "false" でない場合には Invalid_argument "bool_of_string" 例外が発生します。val string_of_int : int -> stringval int_of_string : string -> int0x ないしは 0X で始まっていた場合)または八進(0o ないしは 0O で始まっていた場合)または二進(0b ないしは 0B で始まっていた場合)で読み込まれます。
引数が整数の文字列表現として妥当なものでなかった場合や、引数の表す整数が int 型で表現可能な範囲を越えていた場合には Failure "int_of_string" 例外が発生します。val string_of_float : float -> stringval float_of_string : string -> floatFailure "float_of_string" 例外が発生します。val fst : 'a * 'b -> 'aval snd : 'a * 'b -> 'b
List モジュールでより多くのリスト演算が提供されています。
val (@) : 'a list -> 'a list -> 'a listtype in_channel
type out_channel
val stdin : in_channelval stdout : out_channelval stderr : out_channelval print_char : char -> unitval print_string : string -> unitval print_int : int -> unitval print_float : float -> unitval print_endline : string -> unitval print_newline : unit -> unitval prerr_char : char -> unitval prerr_string : string -> unitval prerr_int : int -> unitval prerr_float : float -> unitval prerr_endline : string -> unitval prerr_newline : unit -> unitval read_line : unit -> stringval read_int : unit -> intFailure "int_of_string" 例外が発生します。val read_float : unit -> floattype open_flag =
| |
Open_rdonly |
(* | 読み込み用に開く | *) |
| |
Open_wronly |
(* | 書き込み用に開く | *) |
| |
Open_append |
(* | 追記用に開く(常にファイル終端に書き込む) | *) |
| |
Open_creat |
(* | ファイルが存在しない場合は作成する | *) |
| |
Open_trunc |
(* | ファイルが存在した場合には空にする | *) |
| |
Open_excl |
(* | Open_creat が指定されていてファイルがすでに存在した場合には失敗する | *) |
| |
Open_binary |
(* | バイナリモードで開く(変換を行なわない) | *) |
| |
Open_text |
(* | テキストモードで開く(変換を行なう可能性がある) | *) |
| |
Open_nonblock |
(* | ノンブロッキングモードで開く | *) |
val open_out : string -> out_channelSys_error 例外が発生します。val open_out_bin : string -> out_channelopen_out と同じですが、ファイルをバイナリモードで開きます。
書き込み時に変換は行なわれません。
テキストモードとバイナリモードを区別しない OS では、この関数は open_out と同じように振る舞います。val open_out_gen : open_flag list -> int -> string -> out_channelopen_out_gen mode perm filename は名前のついたファイルを書き込み用に開きます。
mode にはモードを指定します。
perm にはファイルが作成されるときのパーミッションを指定します。
open_out と open_out_bin はこの関数を特殊化したものです。val flush : out_channel -> unitval flush_all : unit -> unitval output_char : out_channel -> char -> unitval output_string : out_channel -> string -> unitval output : out_channel -> string -> int -> int -> unitoutput oc buf pos len は文字列 buf の pos 番目から len
文字を与えられた出力ポート oc に書き込みます。
pos と len が buf の妥当な部分文字列を表さない場合には
Invalid_argument "output" 例外が発生します。val output_byte : out_channel -> int -> unitval output_binary_int : out_channel -> int -> unitinput_binary_int 関数だけです。
出力形式は同一のバージョンの Objective Caml であればすべての計算機で互換性があります。val output_value : out_channel -> 'a -> unitinput_value 関数で読み戻すことができます。
より詳しくは Marshal モジュールの説明を読んでください。
output_value は Marshal.to_channel に空のフラグリストを与えたものと等価です。val seek_out : out_channel -> int -> unitseek_out chan pos はチャネル chan の書き込み位置を pos に設定します。
これは通常のファイルに対してだけ働きます。
他の種類のファイル(例えば、端末やパイプ、ソケット)に対する振る舞いは規定されていません。val pos_out : out_channel -> intOpen_append フラグを指定して開いたチャネルに対しては動作しません(結果は規定されていません)。val out_channel_length : out_channel -> intval close_out : out_channel -> unitclose_out や flush 以外の出力関数を適用すると
Sys_error 例外が発生します。この二関数は閉じたチャネルに適用しても何もしません。
バッファをフラッシュするときやファイルを閉じるときに OS
エラーが通知した場合、この関数は Sys_error 例外を発生させる可能性があります。val close_out_noerr : out_channel -> unitclose_out と同じですが、エラーをすべて無視します。val set_binary_mode_out : out_channel -> bool -> unitset_binary_mode_out oc true はチャネル oc をバイナリモードに設定します。
これにより書き込み時の変換が行なわれなくなります。
set_binary_mode_out oc false とすると、チャネル oc をテキストモードに設定します。
これにより OS 依存で出力中に変換が行なわれるようになります。
例えば Windows 上では行末が \n から \r\n に変換されます。
この関数はテキストモードとバイナリモードを区別しない OS では何の効果もありません。val open_in : string -> in_channelSys_error 例外が発生します。val open_in_bin : string -> in_channelopen_in と同じですが、ファイルはバイナリモードで開かれます。
読み込み時に変換は行なわれません。
テキストモードとバイナリモードを区別しない OS では、この関数は open_in と同じように振る舞います。val open_in_gen : open_flag list -> int -> string -> in_channelopen_in_gen mode perm filename は名前のついたファイルを開きます。
mode と perm にはファイルのモードとパーミッションを指定します。
open_in と open_in_bin はこの関数を特殊化したものです。val input_char : in_channel -> charEnd_of_file 例外が発生します。val input_line : in_channel -> stringEnd_of_file 例外が発生します。val input : in_channel -> string -> int -> int -> intinput ic buf pos len は与えられたチャネル ic から len 文字読み込み、文字列
buf の pos 文字目以降に格納します。
実際に読み込んだ文字数(0 以上 len 以下)を返します。
戻り値が 0 以上 len 未満のときは、充分な文字がなかったか、分割して読み込んだ方がよいと処理系が判斷したかで、要求された len 文字がすべては読まれなかったということです。
必要であれば、残りの文字を読み込むために input を再度呼び出さなければなりません
(ちょうど len 文字読み込む方法については really_input
も参照してください)。 pos と len が buf の有効な部分文字列を表さない場合には
Invalid_argument "input" 例外が発生します。val really_input : in_channel -> string -> int -> int -> unitinput ic buf pos len は与えられたチャネル ic から len 文字読み込み、文字列
buf の pos 文字目以降に格納します。
len 文字読み込む前にファイル終端に達した場合には End_of_file 例外が発生します。
pos と len が buf の有効な部分文字列を表さない場合には
Invalid_argument "really_input" 例外が発生します。val input_byte : in_channel -> int
val input_binary_int : in_channel -> intoutput_binary_int を参照してください。
整数の読み込み中にファイル終端に達した場合には End_of_file 例外が発生します。val input_value : in_channel -> 'aoutput_value の生成したオブジェクトの外部表現を読み込み、それに対応する値を返します。
この関数は Marshal.from_channel と同じです。
特に型安全性の欠如などについて、より詳しくは Marshal モジュールの説明を参照してください。val seek_in : in_channel -> int -> unitseek_in chan pos はチャネル chan の読み込み位置を pos に設定します。
この関数は通常のファイルに対してのみ動作します。
他の種類のファイルに適用した場合の振る舞いは規定されていません。val pos_in : in_channel -> intval in_channel_length : in_channel -> intval close_in : in_channel -> unitclose_in 以外の関数を適用すると Sys_error 例外が発生します。
既に閉じたチャネルに close_in を適用しても何も起こりません。
OS がエラーを通知してきた場合には close_in が Sys_error 例外を発生させる可能性があることに注意してください。val close_in_noerr : in_channel -> unitclose_in と同じですがエラーをすべて無視します。val set_binary_mode_in : in_channel -> bool -> unitset_binary_mode_out oc true とするとチャネル oc をバイナリモードに設定します。
これにより読み込み時の変換が行なわれなくなります。
set_binary_mode_out oc false とすると、チャネル oc をテキストモードに設定します。
これにより OS 依存で読み込み中に変換が行なわれるようになります。
例えば Windows 上では行末が \r\n から \n に変換されます。
この関数はテキストモードとバイナリモードを区別しない OS では何の効果もありません。module LargeFile:sig..end
type 'a ref = {
|
mutable contents : |
'a の値を格納するリファレンス(変更可能な間接セル)の型。val ref : 'a -> 'a refval (!) : 'a ref -> 'a!r はリファレンス r の現在の内容を返します。
fun r -> r.contents と等価です。val (:=) : 'a ref -> 'a -> unitr := a は リファレンスに a の値を格納します。
fun r v -> r.contents <- v と等価です。val incr : int ref -> unitfun r -> r := succ !r と等価です。val decr : int ref -> unitfun r -> r := pred !r と等価です。Scanf モジュールの書式付き入力関数群と、
Printf モジュールと Format モジュールで定義された書式付き出力関数群を使って
データを読み書きするのに使われます。('a, 'b, 'c, 'd, 'e, 'f) format6
という一般的で非常に多相的な型をしています。
format6 型は組み込みの型です。
より単純化した format 型と format4 型は、 Objective Caml
の以前のリリースとの互換性のために提供されています。
'a は書式のパラメータの型で、 'c は printf 形式の関数の結果の型、
'b は %a や %t に対応する表示関数の最初の引数の型です。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 -> stringval format_of_string : ('a, 'b, 'c, 'd, 'e, 'f) format6 -> ('a, 'b, 'c, 'd, 'e, 'f) format6format_of_string s は文字列リテラル s を読み取って書式指定文字列を返します。val (^^) : ('a, 'b, 'c, 'd, 'e, 'f) format6 ->
('f, 'b, 'c, 'e, 'g, 'h) format6 -> ('a, 'b, 'c, 'd, 'g, 'h) format6f1 ^^ f2 は書式指定 f1 と f2 を連結します。
結果の書式指定は f1 からの引数を受け付け、その次に f2 からの引数を受け付けます。val exit : int -> 'aflush_all を使ってすべてフラッシュされます。
プログラムが正常に終了するときには暗黙に exit 0 が実行されます。
それよりも前に、捕捉されない例外によりプログラムが停止した場合には、暗黙の
exit 2 が実行されます。val at_exit : (unit -> unit) -> unitat_exit によって登録された関数は、 exit が呼び出されるか、プログラムが正常に終了するか、捕捉されない例外により終了するときに呼び出されます。
関数群は「後入れ先出し」(LIFO)順で実行されます。すなわち、いちばん最後に
at_exit で登録された関数が最初に呼び出されます。val valid_float_lexem : string -> stringval unsafe_really_input : in_channel -> string -> int -> int -> unitval do_at_exit : unit -> unit