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
プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~ p.51より。再帰的に定義する。
# let rec euclid m n = if m = n then m else if m > n then euclid n m else euclid (n - m) m ;; val euclid : int -> int -> int = <fun> # euclid 12 60;; - : int = 12 # euclid 12 6;; - : int = 6
基本的には m≦n のつもりで書いているけど,n – m と m の大小関係は決定できないので3行目を入れた。これで m と n の大小関係も気にしなくて済んでいる。
2つ(あるいはそれ以上)の関数を and でつないでいっぺんに定義できるがおもしろい。
and の後の関数には let rec が要らない。
# let rec even n = if n = 0 then true else odd (n - 1) and odd n = if n = 0 then false else even (n - 1) ;; val even : int -> bool = <fun> val odd : int -> bool = <fun> # even 3;; - : bool = false # even 4;; - : bool = true # odd 5;; - : bool = true # odd 8;; - : bool = false
こないだ買ったOCamlの本プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~を少しずつ読んでいる。
まずは基本的な型:
整数と実数で演算子が違う。
間違えるとエラーになる。
# 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'
let式を使う。
# let pi = 3.141529;; val pi : float = 3.141529 # pi;; - : float = 3.141529
これも 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構築まで~