7.4 定数式と組込み関数
型付き言語であるMLでは,定数式はすべて決まった型を持ちます. MLでよく使われる組込み型には以下のものがあります.
型 | 内容 |
---|---|
int | (マシン語1ワードの大きさの)符号付き整数 |
real | 倍精度浮動小数点 |
char | 文字型 |
string | 文字列型 |
word | (マシン語1ワードの大きさの)符号無し整数 |
bool | 真理値型 |
真理値型以外は,他のプログラミング言語と考え方は同じです. これらの組込み方の定数式と基本組込み演算を覚えましょう. 真理値型の扱いは次節で説明します.
7.4.1 int型
int型は整数型です.
SML#では,C言語のlongと同一の2の補数表現で表され
る1語長の符号付き整数です.
int型定数には通常の十進数の記述以外に0xh形式の16進
数でも記述できます.
hは0から9の数字とa(Aでもよい)
からf(Fでもよい)までのアルファベットの並びです.
負数の定数はチルダ記号~
を付けて表します.
SML#はint型の値を十進数で表示します.
# 10;
val it = 10 : int
# 0xA;
val it = 10 : int
# ~0xFF;
val it = ~255 : int
int型に対しては,通常の四則演算+, -, *, divが2項演算 子として定義されています.
# 10 + 0xA;
val it = 20 : int
# 0 - 0xA;
val it = ~10 : int
# 10 div 2;
val it = 5 : int
# 10 * 2;
val it = 20 : int
これらの組合せは,通常の算術演算の習慣に従い,*,divが+, -より強く結合します. また,同一の演算子は左から順に計算されます.
# 1 + 2 * 3;
val it = 7 : int
# 4 - 3 - 2;
val it = ~1 : int
7.4.2 real型
realは浮動小数点データの型です. SML#では,C言語のdoubleに相当する64ビットの倍精 度浮動小数点です. real型の定数はs.dEs の形で表現します. ここでsは符号付き十進数,dは符号なし十進数で す. 整数部,小数部,指数部のいずれも省略できますが.小数部と指数部の 両方を省略するとreal型ではなくint型と解釈されます.
# 10.0;
val it = 10.0 : real
# 1E2;
val it = 100.0 : real
# 0.001;
val it = 0.001 : real
# ~1E~2;
val it = ~0.01 : real
# 10;
val it = 10 : int
real型に対してもint型同様に四則演算が定義されていま す. ただし,除算はdivではなく/です.
# 10.0 + 1E1;
val it = 20.0 : real
# 0.0 - 10.0;
val it = ~10.0 : real
# 10.0 / 2.0;
val it = 5.0 : real
# 10.0 * 2.0;
val it = 20.0 : real
7.4.3 char型
charは1文字を表すデータ型です. 文字cを表すchar型定数は#"c"と書きます. cには通常文字以外に以下の特殊文字のエスケープが書けます.
\a |
warning (ASCII 7) |
---|---|
\b |
backspace (ASCII 8) |
\t |
horizontal tab(ASCII 9) |
\n |
new line (ASCII 10) |
\v |
vertical tab (ASCII 11) |
\f |
home feed (ASCII 12) |
\r |
carriage return(ASCII 13) |
\^
|
control character |
\" |
character "
|
\\ |
character \
|
\
|
the character whose code is in decimal |
# #"a";
val it = #"a" : char
# #"\n";
val it = #"\n" : char
文字型に対して以下の組込み演算が定義されています.
val chr : int -> char
val ord : char -> int
chrは与えられた数字をASCIIコードとみなし,そのコードの文字 を返します. ordは文字型データのASCIIコードを返します.
# ord #"a";
val it = 97 : int
# chr (97 + 7);
val it = #"h" : char
# ord #"a" - ord #"A";
val it = 32 : int
# chr (ord #"H" + 32);
val it = #"h" : char
7.4.4 string 型
stringは文字列を表すデータ型です.
string定数は"と"で囲んで文字列表します.
この文字列の中に特殊文字を含める場合は,char型で定義され
ているエスケープシーケンスを使います.
stringデータには,標準出力にプリントするprintと
2つの文字列を連結する^
が組込み関数として定義されています.
# "SML#" ^ "\n";
val it = "SML#\n" : string
# print it;
SML#
val it = () : unit
7.4.5 word 型
wordは符号なし整数型です. word型定数は0wdまたは0wxh の形で表現します. ここでdはそれぞれ十進数,hは16進の数字列です. SML#はword型定数を16進表現で表示します.
# 0w10;
val it = 0wxa : word
# 0wxA;
val it = 0wxa : word
word型データに対してもint型と同じ四則演算が定義され ています. さらにword型データに対しては,種々のビット演算が定義されて います.