32bit CPU の場合には, から まで。それぞれ,min_int,max_int として定義されている。
# min_int;; - : int = -1073741824 # max_int;; - : int = 1073741823
これを超えると駄目。
# min_int - 1;; - : int = 1073741823 # max_int + 1;; - : int = -1073741824
takatoh's blog – Learning programming languages.
32bit CPU の場合には, から まで。それぞれ,min_int,max_int として定義されている。
# min_int;; - : int = -1073741824 # max_int;; - : int = 1073741823
これを超えると駄目。
# min_int - 1;; - : int = 1073741823 # max_int + 1;; - : int = -1073741824
再帰的な関数と定義するには rec をつける。
# let rec fact n = if n = 0 then 1 else n * fact (n - 1);; val fact : int -> int = <fun> # fact 3;; - : int = 6 # fact 6;; - : int = 720
あまり大きな整数は表現できないらしい。
# fact 30;; - : int = -738197504
else は省略できない。
# let even n = if n mod 2 = 0 then true else false;; val even : int -> bool = <fun> # even 3;; - : bool = false # even 8;; - : bool = true
ところで mod が中置演算子なのはへんな気分だ。
# 9 mod 3;; - : int = 0 # (mod) 9 2;; - : int = 1
let式を使う。
# let pi = 3.141529;; val pi : float = 3.141529 # pi;; - : float = 3.141529
整数と実数で演算子が違う。
間違えるとエラーになる。
# 1 + 2;; - : int = 3 # 1.0 + 2.5;; Characters 0-3: 1.0 + 2.5;; ^^^ This expression has type float but is here used with type int # 1.0 +. 2.5;; - : float = 3.5
文字列の連結
# "Hello," ^ " world.";; - : string = "Hello, world."
文字列.[n] という書き方でn番目の文字を取得できる(先頭が0番目)。
# "Hello, world.".[0];; - : char = 'H' # "Hello, world.".[4];; - : char = 'o'
こないだ買ったOCamlの本プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~を少しずつ読んでいる。
まずは基本的な型:
これも let式を使う。
# let area_of_circle r = r *. r *. pi;; val area_of_circle : float -> float = <fun> # area_of_circle 1.0;; - : float = 3.141529
引数の型を間違えないこと。
# area_of_circle 1;; Characters 15-16: area_of_circle 1;; ^ This expression has type int but is here used with type float
プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~