一人読書会 ( プログラミングの基礎 ) 第 2 章 ( P.7 - P.13 )

整数の扱い

整数の扱いは普通の手続き型言語とほぼ一緒みたい。
一つだけ注意があるとすれば、余りを求める mod の書き方かな。
他の四則演算子と違って mod だけは前後にスペースを空けてあげないと関数として認識されてしまうみたい。

#7mod2;;
Characters 0-1:
  7mod2;;
  ^
Error: This expression is not a function, it cannot be applied
# 7 mod 2;;
- : int = 1

こんな感じ。


問題 2.1 の解答

# 7 - 3 * 4;;	(* 2.1.1 *)
- : int = -5
# 7 / 2 * 2;;	(* 2.1.2 *)
- : int = 6
# 7 * 2 / 2;;	(* 2.1.3 *)
- : int = 7

実数の扱い

ここからちょっと未体験ゾーンって感じかな。
四則演算子の後ろに「 . 」を付けないと実数の演算には使えない。
整数専用の演算子と実数専用の演算子という風に分けられているらしい。
それから手続き型では見かけない特殊な実数値「無限大」。 infinity って書くだけで使える。マイナス無限大は neg_infinity 。
問題 2.2 の解答

# 2. *. 3.14 *. 10.;;	(* 2.2.1 *)
- : float = 62.800000000000004
# 1.73 ** 2.;;		(* 2.2.2 *)
- : float = 2.9929
# 7. /. 2.;;		(* 2.2.3 *)
- : float = 3.5

上の解答例から分かるように小数点以下が 0 の場合は省略可。

文字列の扱い

これも良くあるタイプの使い方だね。ダブルクォーテーションで囲むだけ。
何度も書いてきたけど、僕は WindowsMinGW 版で遊んでいるので日本語が正しく表示されません。
なので、文字列に関しては英数字のみで行こうと思います。
問題 2.3 の解答

# "tokyo"^"tokkyo"^"kyokakyoku"^"kyokutyo";;	(* 2.3.1 *)
- : string = "tokyotokkyokyokakyokukyokutyo"
# "kansu"^"gata"^"gengo";;			(* 2.3.2 *)
- : string = "kansugatagengo"

何だか大変なことになってるようなw

比較演算子と bool 型

比較演算子は一般的な書き方だね。特徴は否定の書き方が not ってことくらいかな。
それから比較演算子は整数型にも実数型にも使えるみたい。ただし、整数型と実数型の比較などの異なる型同士の比較は出来ない、と。

# 2 > 3.;;
Characters 4-6:
  2 > 3.;;
      ^^
Error: This expression has type float but is here used with type int

問題 2.4 の解答

# 2 > 3;;			(* 2.4.1 *)
- : bool = false
# not (3.1215 ** 2.0 > 10.);;	(* 2.4.2 *)
- : bool = true
# 8 mod 3 = 2;;			(* 2.4.3 *)
- : bool = true
# 3 + 4 + 5 = 4 * 3;;		(* 2.4.4 *)
- : bool = true
# (3 + 4 + 5) = (4 * 3);;	(* カッコを入れたほうが読みやすいかな *)
- : bool = true

その他のデータ型

OCaml でも他の言語と同じようにユーザ定義のデータ型が使えるみたい。
本文中では結構進まないと出てこないみたいだけど。