Standard ML について

Standard ML とは

Standard ML (SML) は代表的な関数型言語の一つです。 プログラミング言語 ML の一方言という位置づけであり,同じ ML 言語族の方言としては OCaml が有名です。 最近 F# も仲間に加わりました。

ML は1970年代にエディンバラ大学で,定理証明系のためのメタ言語 (metalanguage) として設計された経緯があります。 これが ML という名前の由来です。 後に,ML の標準仕様という位置づけで Standard ML が定められました。 LISP にとっての Common Lisp みたいなものです。

ML の特徴

ML は私たちがよく使う手続き型言語とは明らかに系統の異なる言語であり,特徴を挙げようとすればきりがありませんが,強いて言うならば以下のような特徴が挙げられます。

中でも ML の最大の特徴といえるのは,なんといっても強力な型推論機構でしょう。 以下の例をご覧ください。

- fun area_of_circle r = Math.pi * r * r;
val area_of_circle = fn : real -> real

- area_of_circle 2.0;
val it = 12.5663706144 : real

ハイフンで始まる行 (1行目と4行目) は対話環境への入力,他の行は出力結果です。 1行目では,円の面積を求める関数 area_of_circle の定義をしています。 この関数の宣言には型を何も明示していませんが,MLの型推論機構によって area_of_circle の型が real -> real であることが自動的に推論されています。

推論の仕組みはこんな感じです。

  1. Math.pireal 型だから,rreal 型だな。
  2. Math.pirreal 型だから,Math.pi * r * rreal 型だな。
  3. rreal 型で Math.pi * r * rreal 型だから,area_of_circlereal -> real 型だな。

ML で採用されているこの芋づる式型推論機構は Hindley-Milner 型推論機構 と呼ばれています。 今回の area_of_circle はあまり面白くない例でしたが,高階型や多相型が現れる場面ではこの型推論機構が真価を発揮します。