ML (プログラミング言語)

ML (プログラミング言語)の最新ニュースをまとめて検索!

ML
パラダイム 関数型命令型
登場時期 1970年代
設計者 ロビン・ミルナーおよびその他のエディンバラ大学の人物
型付け 型推論をもつ、
強い静的型付け
方言 SML, OCaml
影響を受けた言語 ISWIM
影響を与えた言語 Miranda, Haskell, Cyclone, Nemerle
  

ML(えむえる、Meta-Language)は、最初期の関数型言語。ただし、現在の関数型言語の観点からすると、命令的な部分を容易に書くことができるなどの理由から「純粋でない」とされる。

目次

[編集] 概要

1974年エディンバラ大学で開発されたEdinburgh LCF(Logic for Computable Function)という定理証明を支援するシステムの推論規則を記述する言語として開発された。名前の由来(メタ言語)もこのことから来ている。文法はISWIMの影響を受けている。

言語機能としては、型推論が有名。これは、明示的に型の宣言を行わなくても、データの利用のされ方から、引数や関数の返す型を自動的に推論してくれる機能である。これにより、プログラマの負担が著しく軽減される。

MLにはいくつかの実装があり、仕様もそれぞれ微妙に異なるが、最も有名なのは Standard-ML(SML)である。SML の実装としては SML/NJ (Standard-ML/New Jersey) や Moscow ML、 MLton など。他の代表的な ML の方言としては、

などがある。

[編集] 演算子

これ以降での表記、機能はSMLに準拠するものとし、他の仕様に関してはそれぞれのページを参照とする。

MLでの基本的な演算子は以下の通り

  • + 加算, - 減算, * 乗算
  • / 実数での除算, div 整数での除算, mod 剰余
  •  :: リストに要素を追加, @ リスト の結合
  • ^ 文字列の連結, if~then~else if文(扱いは3項演算子)

[編集] 関数の定義

ML では関数の定義は

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

で表す。PrologHaskellと同様にMLでは引数の評価にパターンマッチングを用いることで複数に内容を分割できる。その場合は | を使用して分割する。

例として階乗を求めるプログラムを以下に示す。

   fun factorial(1) = 1
   | factorial(n) = n * factorial(n-1);

MLでの関数の評価は関数が定義されたときに行われる。このため ML では関数定義の順序が無視できない。例として

   fun a(x) = b(x-1) + x;
   fun b(x) = x * x;

のような関数がある場合は必ず b の方が先に定義されていないといけない。しかしこの場合はお互いを呼ぶような再帰呼び出しの実装が不可能である。そこで ML ではそのような関数のために二つの関数をandでつなぐことによってこれを実装することができる。 例を挙げると

   fun take(nil) = nil
   | take(x::xs) = x::skip(xs)
   and skip(nil) = nil
   | skip(x::xs) = take(xs);

これは take が与えられたリストの奇数番目の要素を返し、skip が偶数番目の要素を返す関数である。

[編集] 外部リンク

最終更新 2009年9月16日 (水) 08:31 (日時は個人設定で未設定ならばUTC)。
【ML (プログラミング言語)】変更履歴

ご利用上の注意