§ 7.4. 定数式と組込み関数
型付き言語であるMLでは,定数式はすべて決まった型を持ちます. MLでよく使われる組込み型には以下のものがあります.
型 | 内容 |
int | (マシン語1ワードの大きさの)符号付き整数 |
real | 倍精度浮動小数点 |
char | 文字型 |
string | 文字列型 |
word | (マシン語1ワードの大きさの)符号無し整数 |
bool | 真理値型 |
真理値型以外は,他のプログラミング言語と考え方は同じです. これらの組込み方の定数式と基本組込み演算を覚えましょう. 真理値型の扱いは次節で説明します.
§ 7.4.1. int型
int型は整数型です.
SML#では,C言語のlongと同一の2の補数表現で表され
る1語長の符号付き整数です.
int型定数には通常の十進数の記述以外に0x~
を付けて表します.
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型の定数は
# 10.0;
val it = 10.0 : real
# 1E2;
val it = 10.0 : real
# .001;
val it = 0.001 : real
#~
1E~
2;
val it = 0.001 : real
# 10;
val it = 10 : int
real型に対してもint型同様に四則演算が定義されていま す. ただし,除算はdivではなく/です.
# 10.0 + 1E1;
val it = 20.0 : real
# 0.0 - 0xA;
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文字を表すデータ型です.
文字
\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 |
carrige return(ASCII 13) |
\^ |
control character |
\" |
character " |
\\ |
character \ |
\ |
the character whose code is |
# #"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型定数は0w
# 0w10;
val it = 0xA : word
# 0wxA;
val it = 0xA : word
word型データに対してもint型と同じ四則演算が定義され ています. さらにword型データに対しては,種々のビット演算が定義されて います.