Erlang内部での文字の扱いは単なる整数型(ASCIIコード)の値です。
ASCIIコードは「0〜255」までの整数です。
「 $
」を使うことによって、文字に割り当てられている値を得ることができます。
> $A.
65
ASCII文字コード表で確認すると、確かに「A」の文字コードは「65」となっているようです。
このようにErlangにおいては文字をアルファベットを専門とするアスキーコードで扱うため、
日本語に関する言語処理を行なうことは非常に難しいかもしれません。
そもそもErlangはテキスト処理を得意としている言語ではないので、もし柔軟なが機能必要なのであれば、
他の言語と組み合わせて使用するのが良いかもしれません。
Erlangの文字列は「文字のリスト」として扱われています。
Erlangの文字は整数型の値でした。
したがって、文字列は「整数型(0〜255)のリスト」であると言えます。
少し実験をしてみます。
文字列は二重引用符(")で囲むことによって表現します。
> String = "Hello".
"Hello"
変数Stringに文字列が格納されています。
次に、文字列が「文字のリスト」であるということを確認してみます。
String2 = [$H,$e,$l,$l,$o].
"Hello"
確かに文字のリストは文字列として扱われていますね。
また、「文字は整数型」でした。したがって、各文字をアスキーコードに直してリストに入れてみます。
String3 = [72,101,108,108,111].
"Hello"
きちんと文字列として扱われていますね。
次に標準出力について扱います。出力については、BIFのioモジュールにある関数が良く利用されます。
その中でも最も良く使われるのは、 io:format でしょう。
これはCでいうprintfや、JavaでいうSystem.out.printにあたります。
io:format("hello~n").
hello
ok
これは引数を出力する関数です。文字列の最後にある ~n は改行です。
出力されているのは2行ですが、1行目が関数により出力された結果で、2行目は関数の返り値となっています。
次に引数が2つあるio:formatを見ましょう。
> io:format("hello ~p~n",[erlang]).
hello erlang
ok
> Month = 5.
5
> Day = 3.
3
> io:format("my birthday is ~p/~p~n",[Month,Day]).
my birthday is 5/3
ok
io:format/2の第一引数に出力する文字列、第二引数にリストを指定します。リストの中には文字列の中に埋め込みたい値を格納します。
~p で指定された場所にリスト内の値が埋め込まれているのがわかりますね。
~nや~pはio:formatやio:fwrite関数の中で使えるコントロールシーケンスです。上の例のように第二引数のリスト内の要素を出力したりする際に使われます。
主要なものを記します。その他についてはここをご参照願います。ioマニュアル
シーケンス | 役割 |
---|---|
~n | 改行 |
~p | 整形して出力を行なう |
~s | 文字列の出力を行なう |
~w | データをそのまま出力する |
> String = "Erlang".
"Erlang"
> io:format("word ~s~n",[String]).
word Erlang
ok
> io:format("word ~w~n",[String]).
word [69,114,108,97,110,103]
ok
> io:format("word ~p~n",[String]).
word "Erlang"
特に書式を意識しないのであれば、 ~p を使うのが良いと思います。 この関数はデバッグの際に気になる部分に加えることで、実行処理を確かめるのに役立ってくれます。
文字列処理によく利用されるBIFはstringモジュールです。リファレンスとして良く利用される関数をまとめます。