module Pervasives:初期状態でsig
..end
open
されているモジュール
このモジュールは(数値、真偽値、文字列、例外、リファレンス、リスト、配列、入出力チャネルといった)組み込みの型に対する基本的な演算を提供しています。
このモジュールはコンパイルを始めるときに毎回自動的に open
されます。
したがって、このモジュールの構成要素はすべて、 Pervasives
をつけずに参照することができます。
val raise : exn -> 'a
val invalid_arg : string -> 'a
Invalid_argument
例外を送出します。val failwith : string -> 'a
Failure
例外を送出します。exception Exit
Exit
例外を発生させるライブラリ関数はありません。
ユーザープログラムで使うために提供されている例外です。val (=) : 'a -> 'a -> bool
e1 = 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 -> int
x
と 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 -> '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
となることは保証されます。val (!=) : 'a -> 'a -> bool
(==)
の否定。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
val (~-) : int -> int
~-e
の代わりに - e
と書くこともできます。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
例外が発生します。
整数の除算では、実際の商を零方向に丸めます。
より精確に言うと、 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) - 1
という性質を満たします。
y = 0
のときは Division_by_zero
例外が発生します。
x mod y
は x < 0
のときだけ負になることに注意してください。val abs : int -> int
min_int
のとき負の数が返ることがあることに注意してください。val max_int : int
val min_int : int
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
のときの結果は規定されていません。
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 -> 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 expm1 : float -> float
expm1 x
は exp x -. 10
を計算します。
x
が 0.0 に近いときでも精確な結果を返します。val log1p : float -> float
log1p x
は log(1.0 +. x)
(自然対数)を返します。
x
が 0.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]
になければなりません。
結果は 0.0
から pi
までのラジアン角になります。val atan : float -> float
-pi/2
から pi/2
までのラジアン角になります。val atan2 : float -> float -> float
atan y x
は y /. x
の逆正接を返します。
x
と y
の符号が結果の象限を決めるのに使われます。
結果は -pi
から pi
までのラジアン角になります。val cosh : float -> float
val sinh : float -> float
val tanh : float -> float
val ceil : float -> float
ceil f
は f
以上の最小の整数を返します。結果は浮動小数点数として返ります。val floor : float -> float
floor f
は f
以下の最大の整数を返します。結果は浮動小数点数として返ります。val abs_float : float -> float
abs_float f
は f
の絶対値を返します。val mod_float : float -> float -> float
mod_float a b
は a
を b
で割った余りを返します。
n
を商 a /. b
を零方向に丸めた整数とすると、戻り値は a -. n *. b
になります。val frexp : float -> float * int
frexp f
は f
の仮数部と指数部のペアを返します。
f
が 0 のとき、 f
の仮数部 x
と指数部 n
は 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
の小数部と整数部のペアを返します。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
のような未定義の演算の結果を表す浮動小数点値です。
非数(``not a number'')を意味します。
nan
に対する浮動小数点演算はすべて nan
を返します。
比較に関しては、引数の一方ないしは両方が nan
のとき、
=
、 <
、 <=
、 >
、 >=
は false
を返し、 <>
は true
を返します。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 |
(* | 数ではない(Not a Number -- nan である)。未定義の演算の結果である | *) |
classify_float
関数により特定された浮動小数点数の種別。val classify_float : float -> fpclass
String
モジュールでより多くの文字列演算が提供されています。
val (^) : string -> string -> string
Char
モジュールでより多くの文字演算が提供されています。
val int_of_char : char -> int
val char_of_int : int -> char
Invalid_argument "char_of_int"
が発生します。val ignore : 'a -> unit
()
を返します。
例えば ignore(f x)
は副作用のある関数 f
の結果を捨てます。
これは f x; ()
と等価ですが、こちらはコンパイラが警告を表示するかもしれません。
代わりに ignore(f x)
と書くと警告を避けることができます。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
ないしは 0X
で始まっていた場合)または八進(0o
ないしは 0O
で始まっていた場合)または二進(0b
ないしは 0B
で始まっていた場合)で読み込まれます。
引数が整数の文字列表現として妥当なものでなかった場合や、引数の表す整数が int
型で表現可能な範囲を越えていた場合には Failure "int_of_string"
例外が発生します。val string_of_float : float -> string
val float_of_string : string -> float
Failure "float_of_string"
例外が発生します。val fst : 'a * 'b -> 'a
val snd : 'a * 'b -> 'b
List
モジュールでより多くのリスト演算が提供されています。
val (@) : 'a list -> 'a list -> 'a list
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_int : int -> unit
val print_float : float -> unit
val print_endline : string -> unit
val print_newline : unit -> unit
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
val read_line : unit -> string
val read_int : unit -> int
Failure "int_of_string"
例外が発生します。val read_float : unit -> float
type
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_channel
Sys_error
例外が発生します。val open_out_bin : string -> out_channel
open_out
と同じですが、ファイルをバイナリモードで開きます。
書き込み時に変換は行なわれません。
テキストモードとバイナリモードを区別しない OS では、この関数は open_out
と同じように振る舞います。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 : out_channel -> string -> int -> int -> unit
output oc buf pos len
は文字列 buf
の pos
番目から len
文字を与えられた出力ポート oc
に書き込みます。
pos
と len
が buf
の妥当な部分文字列を表さない場合には
Invalid_argument "output"
例外が発生します。val output_byte : out_channel -> int -> unit
val output_binary_int : out_channel -> int -> unit
input_binary_int
関数だけです。
出力形式は同一のバージョンの Objective Caml であればすべての計算機で互換性があります。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
はチャネル chan
の書き込み位置を pos
に設定します。
これは通常のファイルに対してだけ働きます。
他の種類のファイル(例えば、端末やパイプ、ソケット)に対する振る舞いは規定されていません。val pos_out : out_channel -> int
Open_append
フラグを指定して開いたチャネルに対しては動作しません(結果は規定されていません)。val out_channel_length : out_channel -> int
val close_out : out_channel -> unit
close_out
や flush
以外の出力関数を適用すると
Sys_error
例外が発生します。この二関数は閉じたチャネルに適用しても何もしません。
バッファをフラッシュするときやファイルを閉じるときに OS
エラーが通知した場合、この関数は 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
をテキストモードに設定します。
これにより OS 依存で出力中に変換が行なわれるようになります。
例えば Windows 上では行末が \n
から \r\n
に変換されます。
この関数はテキストモードとバイナリモードを区別しない OS では何の効果もありません。val open_in : string -> in_channel
Sys_error
例外が発生します。val open_in_bin : string -> in_channel
open_in
と同じですが、ファイルはバイナリモードで開かれます。
読み込み時に変換は行なわれません。
テキストモードとバイナリモードを区別しない OS では、この関数は open_in
と同じように振る舞います。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 -> string -> int -> int -> int
input 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 -> unit
input 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 -> int
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
はチャネル chan
の読み込み位置を pos
に設定します。
この関数は通常のファイルに対してのみ動作します。
他の種類のファイルに適用した場合の振る舞いは規定されていません。val pos_in : in_channel -> int
val in_channel_length : in_channel -> int
val close_in : in_channel -> unit
close_in
以外の関数を適用すると Sys_error
例外が発生します。
既に閉じたチャネルに close_in
を適用しても何も起こりません。
OS がエラーを通知してきた場合には close_in
が Sys_error
例外を発生させる可能性があることに注意してください。val close_in_noerr : in_channel -> unit
close_in
と同じですがエラーをすべて無視します。val set_binary_mode_in : in_channel -> bool -> unit
set_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 ref
val (!) : 'a ref -> 'a
!r
はリファレンス r
の現在の内容を返します。
fun r -> r.contents
と等価です。val (:=) : 'a ref -> 'a -> unit
r := a
は リファレンスに 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
と等価です。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 -> string
val format_of_string : ('a, 'b, 'c, 'd, 'e, 'f) format6 -> ('a, 'b, 'c, 'd, 'e, 'f) format6
format_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) format6
f1 ^^ f2
は書式指定 f1
と f2
を連結します。
結果の書式指定は f1
からの引数を受け付け、その次に f2
からの引数を受け付けます。val exit : int -> 'a
flush_all
を使ってすべてフラッシュされます。
プログラムが正常に終了するときには暗黙に exit 0
が実行されます。
それよりも前に、捕捉されない例外によりプログラムが停止した場合には、暗黙の
exit 2
が実行されます。val at_exit : (unit -> unit) -> unit
at_exit
によって登録された関数は、 exit
が呼び出されるか、プログラムが正常に終了するか、捕捉されない例外により終了するときに呼び出されます。
関数群は「後入れ先出し」(LIFO)順で実行されます。すなわち、いちばん最後に
at_exit
で登録された関数が最初に呼び出されます。val valid_float_lexem : string -> string
val unsafe_really_input : in_channel -> string -> int -> int -> unit
val do_at_exit : unit -> unit