プログラミング言語SML#解説 4.0.0版
7 MLプログラミング入門

7.1 ML言語について

SML#はML系関数型プログラミング言語の一つです.

ML言語はEdinburgh LCF[3]のメタ言語(Meta Language)として開発されました. メタという接頭語のこの特別な使われ方は,ギリシャ語の“ta meta ta phusika”という用例に遡るといわれています. このフレーズは単に,自然学(physics)のあとに置かれた名前が付 けられていない本を示すギリシャ語でしたが,その本の内容が哲学(形而上学, metaphysics)であったことから,このメタという接頭語に,通常の思考の次元 をこえて物事を分析する哲学的な態度,という意味が与えられるようになりまし た. 言語学の文脈では,メタ言語とは,ある言語の分析や記述をするための 言語を意味します. プログラミング言語を変換したり処理するための言語もメタ言語とみな すことができます. Edinburgh LCFは計算可能な関数(つまりプログラム)を対象とした一 種の定理証明システムであり,その対象となる関数はPPLAMBDAと呼ばれる型付ラ ムダ計算で表現されました. LCF MLはPPLAMBDAのメタ言語,つまりPPLAMBDAで書かれたプログラムを操 作しするためのプログラミング言語でした. MLの名前はこの歴史的事実に由来しています. 関数を表すラムダ式を柔軟に操作する目的のために,ML自身ラムダ計 算を基礎とする関数型言語として設計されました. さらにプログラムを操作するプログラムを柔軟にかつ信頼性を持って記 述するために,型の整合性を自動的に検査する型推論機構が初めて開発されまし た.

このLCF MLは,PPLAMBDAの操作言語にとどまらない汎用のプロ グラミング言語として価値があることが認識され,CardelliによってLCFとは独 立したプログラミング言語としてのMLコンパイラが開始され,PDP11やVAX VMSな どの上に実装され使用されました. その後,Milner,Harper,MacQueen等によってプログラミング言語とし ての仕様策定の努力がなされ,さらにこの言語がEdinburgh大学によってCardelli のML上に実装されました. これらの成果を踏まえ,Standard MLの仕様[5]が確定し,その 後改訂され現在のStandard ML言語仕様[6]として完成しました.