OCamlでは、配列ではなくリストが使われる。
リストの宣言&初期化の仕方は、
また、リストの要素は同じ型でないといけないので、char型とint型、float型とint型を混ぜて使おうとするとエラーになる。
リストとリストの結合は、演算子"@"を使う。
同じように、ある要素をリストの先頭に挿入する場合は、"::"を用いて
ある要素がリストに含まれているかを調べるには、containメソッドを次のように定義すればよい。
これは、まず、match文で仮引数のlistについて比較し、
listの要素が無ければnが含まれているわけないのでfalseを返し、
そうでない時、listを最初の要素h(head)と残りのリスト(tail)に分割し、hがnと等しかったらtrueを返し、そうでない時、残りの部分tとnを比較する。
"|"と"||"は"または"の意味で、前者は、比較最中にtrueが決まると残りの部分は検討せずにtrueを返し、後者は最後まで計算をする。"&"と"&&"も同様である。
実行結果は、先ほどのリストa( = [1; 2;3])を使うと、
次回は、集合(map)の実装について考える
リストの宣言&初期化の仕方は、
# let array = [1; 2; 3; 4];; val array : int list = [1; 2; 3; 4] # let charArray = ['a'; 'b'; 'c'];; val charArray : char list = ['a'; 'b'; 'c']のようにやる。
また、リストの要素は同じ型でないといけないので、char型とint型、float型とint型を混ぜて使おうとするとエラーになる。
# let array = [1; 2; 'a'];; This expression has type char but is here used with type int # let array = [1.0; 2];; This expression has type int but is here used with type float
リストとリストの結合は、演算子"@"を使う。
# let a = [1;2;3];; val a : int list = [1; 2; 3] # let b = [2;4;5];; val b : int list = [2; 4; 5] # let c = a @ b;; val c : int list = [1; 2; 3; 2; 4; 5]これはあくまでリストの結合なので、前のリストに続いて後ろをくっつけただけである。
同じように、ある要素をリストの先頭に挿入する場合は、"::"を用いて
# let d = 0::a;; val d : int list = [0; 1; 2; 3]のようにする。
ある要素がリストに含まれているかを調べるには、containメソッドを次のように定義すればよい。
# let rec contain list n =
match list with
[] -> false
| h::t -> if h=n then true
else contain t n
;;
val contain : 'a list -> 'a -> bool = <fun>
これは、まず、match文で仮引数のlistについて比較し、
listの要素が無ければnが含まれているわけないのでfalseを返し、
そうでない時、listを最初の要素h(head)と残りのリスト(tail)に分割し、hがnと等しかったらtrueを返し、そうでない時、残りの部分tとnを比較する。
"|"と"||"は"または"の意味で、前者は、比較最中にtrueが決まると残りの部分は検討せずにtrueを返し、後者は最後まで計算をする。"&"と"&&"も同様である。
実行結果は、先ほどのリストa( = [1; 2;3])を使うと、
# contain a 1;; - : bool = true # contain a 4;; - : bool = falseとなる。
次回は、集合(map)の実装について考える

コメントする