データ型 一部だけ

整数

最大で1073741823だそうです。というか32bitCPUでは31ビット符号付整数という事みたいです。
64bitCPUだと63ビット符号付整数みたいです。

インタプリタで実行

# 1;;
- : int = 1
# 1073741823;;
- : int = 1073741823
# 1073741824;;
- : int = -1073741824 <= コレは何??
# 1073741825;;
Characters 0-10:
  1073741825;;
  ^^^^^^^^^^
Error: Integer literal exceeds the range of representable integers of type int
# -1;;
- : int = -1
# -1073741823;;
- : int = -1073741823
# -1073741824;;
- : int = -1073741824
# -1073741825;;
Characters 1-11:
  -1073741825;;
   ^^^^^^^^^^
Error: Integer literal exceeds the range of representable integers of type int
整数で演算

演算子は以下の4つ

  • 加 +
  • 減 -
  • 乗 *
  • 商 /
  • 余り mod

数学と同じ計算。乗除が加減より優先、括弧で括ると括弧内優先。

インタプリタで実行

# 100 + 5;;
- : int = 105
# 100 - 5;;
- : int = 95
# 100 - 105;;
- : int = -5
# 100 * 5;;
- : int = 500
# 100 / 5;;
- : int = 20
# 100 / 6;;
- : int = 16
# 100 mod 5;;
- : int = 0
# 100 mod 6;;
- : int = 4
# (5 + 8) * 3;;
- : int = 39
# 5 + 8 * 3;;
- : int = 29
# 5 / 2 * 4;;
- : int = 8
# 5 * 4 / 2;;
- : int = 10

実数

OCamlでは整数と実数は厳格に区別されるそう。演算子が整数用のものは使用できません。
また、余りが無い代わりに、実数にはべき乗の演算子と無限大を表す値があります。

  • 加 +.
  • 減 -.
  • 乗 *.
  • 商 /.
  • べき乗 **
  • 無限大 infinity
  • マイナス無限大 neg_infinity

無限大は実数と同じように扱えます。

# infinity;;
- : float = infinity
# 5.5 +. infinity;;
- : float = infinity

また、実数の演算では、小数点以下が0の場合でも小数点は書く必要があります。

# 1.5 + 1.0;;
Characters 0-3:
  1.5 + 1.0;;
  ^^^
Error: This expression has type float but is here used with type int
# 1.5 +. 1;;
Characters 7-8:
  1.5 +. 1;;
         ^
Error: This expression has type int but is here used with type float
# 1.5 +. 1.
  ;;
- : float = 2.5
# 1.5 +. 1.0;;
- : float = 2.5

文字列

引用符"…"で囲みます。

# "Hello OCaml";;
- : string = "Hello OCaml"

文字列を連結するには『^』を使います。

# "Hello " ^ "OCaml";;
- : string = "Hello OCaml"

真偽値

true, falseで型はbool

論理演算
  • かつ &&
  • または ||
  • 否定 not

論理演算の優先順は

  1. 『否定』
  2. 『かつ』
  3. 『または』
比較演算子
  • 等しい =
  • 等しくない <>
  • より大きい >
  • より小さい
  • 以上 >=
  • 以下 <=

とか。SQLみたいですね。

比較演算子は整数、実数のどちらにも使用できるようです。
ただし、比較する型は同じである必要があります。

# 10 < 100;;
- : bool = true
# 10.5 < 100;;
Characters 7-10:
  10.5 < 100;;
         ^^^
Error: This expression has type int but is here used with type float
# 10.5 < 100.;;
- : bool = true

とりあえずここまで。