Mercury 勉強メモ

関数論理型言語 Mercury を勉強するブログです.

よく使う述語: 入出力編

Mercury の標準ライブラリから, 入出力に関連するよく使いそうな述語をピックアップしました.

よく使う述語

io.print

:- pred io.print(T::in, io::di, io::uo) is det.
:- pred io.print(io.output_stream::in, T::in, io::di, io::uo) is det.

任意の値を出力する.

io.format

:- type string.poly_type ---> f(float); i(int); s(string); c(char).
:- pred io.format(string::in, list(io.poly_type)::in, io::di, io::uo) is det.
:- pred io.format(io.output_stream::in, string::in, list(io.poly_type)::in, io::di, io::uo) is det.

フォーマットを指定して値を出力する.

文字 形式
d, i int 符号付き整数
o int 符号付き8進整数
x, X int 符号付き16進整数
u int 符号無し整数
c char 文字
s string 文字列
f float 浮動小数点数
e, E char 浮動小数点数の科学表記
g, G char 浮動小数点数の科学表記(小数点とその後の0が省略される)
p int 値を整数を出力

C言語同様に,フラグ(0+-#)フィールド長(または*),精度(.*も可)も指定できる.

io.nl

:- pred io.nl(io::di, io::uo) is det.
:- pred io.nl(io.output_stream::in, io::di, io::uo) is det.

改行文字を出力する.

io.flush_output

:- pred io.flush_output(io::di, io::uo) is det.
:- pred io.flush_output(io.output_stream::in, io::di, io::uo) is det.

出力バッファの強制書き出し.

io.result 型

:- type io.result(T)
    --->    ok(T)
    ;       eof
    ;       error(io.error).

入力の結果を返す.

io.read_line

:- pred io.read_line(io.result(list(char))::out, io::di, io::uo) is det.

入力から1行読み込んで読み込んだ文字列を文字のリストにして返す.

io.read_line_as_string

:- pred io.read_line_as_string(io.result(string)::out, io::di, io::uo) is det.
:- pred io.read_line(io.input_stream::in, io.result(list(char))::out, io::di, io::uo) is det.

入力から1行読み込んで読み込んだ文字列を返す.

io.read_char

:- pred io.read_char(io.result(char)::out, io::di, io::uo) is det.
:- pred io.read_char(io.input_stream::in, io.result(char)::out, io::di, io::uo) is det.

入力から1文字読み込んで返す.

io.error_message

:- func io.error_message(io.error) = string.
:- pred io.error_message(io.error::in, string::out) is det.

io.error型の値をその内容を表す文字列に変換する.

io.res 型

:- type io.res(T)
    --->    ok(T)
    ;       error(io.error).

IO処理の結果の型.

io.open_output

:- pred io.open_output(string::in, io.res(io.output_stream)::out, io::di, io::uo) is det.

ファイルを開いて出力ストリームを返す.

io.open_append

:- pred io.open_append(string::in, io.res(io.output_stream)::out, io::di, io::uo) is det.

ファイルを開いて出力ストリーム(追記モード)を返す.

io.close_output

:- pred io.close_output(io.output_stream::in, io::di, io::uo) is det.

出力ストリームを閉じる.

io.open_input

:- pred io.open_input(string::in, io.res(io.input_stream)::out, io::di, io::uo) is det.

ファイルを開いて入力ストリームを返す.

io.close_input

:- pred io.close_input(io.input_stream::in, io::di, io::uo) is det.

入力ストリームを閉じる.

io.stdout_stream

:- pred io.stdout_stream(io.output_stream::out, io::di, io::uo) is det.

標準出力ストリームを返す.

io.stderr_stream

:- pred io.stderr_stream(io.output_stream::out, io::di, io::uo) is det.

標準エラー出力ストリームを返す.

io.stdin_stream

:- pred io.stdin_stream(io.input_stream::out, io::di, io::uo) is det.

標準入力ストリームを返す.

io.set_output_stream

:- pred io.set_output_stream(io.output_stream::in, io.output_stream::out, io::di, io::uo) is det.

現在の出力ストリームを指定したものに変更する. 以前の入力ストリームを返す.

io.output_stream

:- pred io.output_stream(io.output_stream::out, io::di, io::uo) is det.

現在の出力ストリームを返す.

io.set_input_stream

:- pred io.set_input_stream(io.input_stream::in, io.input_stream::out, io::di, io::uo) is det.

現在の入力ストリームを指定したものに変更する. 以前の入力ストリームを返す.

io.input_stream

:- pred io.input_stream(io.input_stream::out, io::di, io::uo) is det.

現在の入力ストリームを返す.

io.command_line_arguments

:- pred io.command_line_arguments(list(string)::out, io::di, io::uo) is det.

コマンドライン引数を文字列のリストで取得(コマンド名は含まない).

io.call_system

:- pred io.call_system(string::in, io.res(int)::out, io::di, io::uo) is det.

指定したコマンドを実行して結果を返す.

関連するサンプルプログラム