プログラミング言語 Ml

ML(えむえる、Meta-Language)は、関数型言語のひとつである。現代風の関数型言語としては歴史が古いほうで、型推論機能などを持つが、デフォルトの評価戦略は遅延評価ではなく先行評価で、書き換えが可能なレコード型を持つなど、いわゆる「純粋関数型」でない特徴や機能を持つ。

ML
パラダイム 手続き型プログラミング関数型プログラミング命令型プログラミング ウィキデータを編集
登場時期 1973年 (51年前) (1973)
設計者 ロビン・ミルナーおよびその他のエディンバラ大学の人物
開発者 ロビン・ミルナー ウィキデータを編集
型付け 型推論をもつ、
強い静的型付け
方言 SML, OCaml
影響を受けた言語 ISWIM ウィキデータを編集
影響を与えた言語 F#,Miranda, Haskell, Cyclone, Nemerle
テンプレートを表示

概要

自動定理証明系において、証明の道筋を関数として記述するためのメタ言語として生まれたという経緯を持ち(#歴史の節を参照)、名前はそのことに由来する。構文はISWIMの影響を受けている。

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

標準(ないし一方言)としてStandard ML (SML) があり、その実装には、Standard ML of New Jersey英語版 (SML/NJ) や、東北大学電気通信研究所大堀研究室が開発を進めているSML#などがある。標準以外の仕様の実装としてはOCamlなどがある。詳細仕様は実装ごとに異なっており、各実装での仕様をそれぞれのMLの方言と捉える場合もある。

SMLの詳細とその実装の一覧はStandard MLを参照のこと。

言語仕様

以降の記法や名前はSMLのものである。OCamlなどその他の実装については、SMLと差異があるため各実装の記事を参照のこと。

演算子

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

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

関数の定義

MLの関数の定義は

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

と書く。Haskellと同様なパターンマッチングがある。複数のパターンはガード記法 | をセパレータとする。

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

   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 が偶数番目の要素を返す関数である。

歴史

デイナ・スコットの提案したPPLAMBDAという論理体系を利用し、ロビン・ミルナーLogic for Computable Functions英語版 (LCF) という証明のチェックや定理の自動証明をするシステムを実装した。1973年に発足したEdinburgh LCFのプロジェクトにおいて、証明の道筋を関数として記述するためのメタ言語として開発されたのが、MLの最初であり、強い型付きの言語として設計された。

Edinburgh LCFとMLは、1975~76年にエディンバラ大学で実装された。特に1980年代以降、汎用プログラミング言語として多数の機能やライブラリが追加されている。

(この節 参考文献『新しいプログラミング・パラダイム』(ISBN 4-320-02493-1) pp. 120-121)

脚注

注釈

出典

参考文献

  • Ullman, Jeffrey『プログラミング言語ML』神林 靖 訳、アスキー、東京、1996年3月。ISBN 4-7561-1641-8 

外部リンク

Tags:

プログラミング言語 Ml 概要プログラミング言語 Ml 言語仕様プログラミング言語 Ml 歴史プログラミング言語 Ml 脚注プログラミング言語 Ml 参考文献プログラミング言語 Ml 外部リンクプログラミング言語 Ml先行評価型推論評価戦略遅延評価関数型言語

🔥 Trending searches on Wiki 日本語:

日本歴代興行成績上位の映画一覧Instagram早川殿佐々木朗希E.T. (アタリ2600)セサミストリートTwitterフリーメイソン東海村JCO臨界事故午前0時の森マカロニえんぴつ黒柳徹子浜口ミホUEFA EURO 2024予選宇田川優希櫛田神社前駅鈴木浩介 (俳優)マックス・シャーザー坂本勇人ノケモノたちの夜大友愛澁谷果歩茂野吾郎女性器ピッチクロック佐藤勝利古川慎堀江貴文佐久間由衣トレイ・ターナー心霊内科医 稲生知性三方ヶ原の戦い小保方晴子武田信玄田中好子ぼっち・ざ・ろっく!日本ES CON FIELD HOKKAIDO女子栄養大学まんこ創価中学校・高等学校高杉真宙機動戦士ガンダム 水星の魔女モーモールルギャバン葵 徳川三代東京・埼玉連続幼女誘拐殺人事件川口由梨香徳川秀忠叶姉妹生理のおじさんとその娘永瀬廉黒川敦彦リベンジ・マッチアナルセックス訃報 2023年3月波岡一喜教場村井美樹名取裕子戦術核兵器ジャニーズWEST新選組アンタッチャブル (映画)エビスザメ石川数正永田寿康Tu-141 (航空機)朴璐美ミステリと言う勿れバイオハザードシリーズの登場人物アントニオ・コンテ参政党キングダム (漫画)りんごちゃん (ものまねタレント)2023 ワールド・ベースボール・クラシック日本代表宮崎勤高橋マイケル仮面ライダーシリーズ指名打者🡆 More