Assyのリベラル文学研究所もご覧ください。

ML/OCaml

ML/OCaml

関数型言語MicrosoftOCamlをベースとした.NET Framework用のF#をリリースしているが、それ以前からHaskellとともに「使える関数型言語」として有名である。

MLとOCamlの特徴

MLは関数型言語で、型推論などの機能を持つ。遅延評価ではなく先行評価をデフォルトの評価戦略とし、書き換え可能なレコード型を持つなど「純粋関数型でない」という特徴を持つ。
OCamlはMLの各要素に加えて、オブジェクト指向的な要素を加えていることが大きな特徴。
MLの関数定義は、

fun (関数名)(引数) = (内容);

となる。

Ocamlオブジェクト指向

オブジェクト – OCamlにサンプルコードがあります。
コードは上記サイトを読んでいただくとして、説明すると、

  • インスタンス変数val mutable the_listはミュータブル(変更可能)であり、値を再代入できる。
  • ( [] : int list )は空のリストを表す。
  • pushはプッシュでスタックを積む。popはポップでスタックから先頭の整数を取り出してそれを返す。peekはスタックに影響を及ぼさず先頭の要素を返す。sizeはスタックのサイズを返す。
  • List.hdは先頭の要素を、List.tlは先頭の要素を取り除いたリストを、List.lengthはリストの長さを返す。
  • ::は要素とリストを組み合わせるconsの演算子で、@はリストとリストを連結するappendの演算子
  • <-は割り当て演算子と呼ばれ、変更可能なインスタンス変数を更新する時に用いる。同じくレコード内の破壊可能フィールドの更新に用いる。