「ML (プログラミング言語)」の版間の差分

削除された内容 追加された内容
m r2.6.4) (ロボットによる 追加: he:ML (שפת תכנות)
編集の要約なし
19行目:
}}
 
'''ML'''(えむえる、Meta-Language)は、最初期の[[関数型言語]]のひとつであるただし、代風の関数型言語の観点からするしては歴史が古いほうで命令的[[型推論]]機能部分容易に書くこと持つ、デフォルトの[[評価戦略]]は[[遅延評価]]はなく[[先行評価]]で、書換えが可能なレコード型を持つなどの理由から、いわゆる「純粋関数型」でない」とされる特徴や機能を持つ
 
== 概要 ==
[[1974年]]、[[エディンバラ大学]]で開発されたEdinburgh LCF(Logic for Computable Function)という定理証明を支援するシステム(参考: [[自動定理証明]])<!--の[[推論規則]]-->を記述する言語として開発された。名前の由来([[メタ言語]])もこのことから来ている。は[[ISWIM]]の影響を受けている。
 
言語MLによってプログラマに知られるようになった機能としては、[[型推論]]が有名ある。これは、明示的に型の宣言を行わなくても、データの利用のされ方から、引数や関数の返す型を自動的に推論してくれる機能である。これにより、プログラマの負担が著しく軽減される。
 
言語仕様は実装によって異なっており、各実装における仕様を、それぞれのMLの方言とみることもある。標準としては[[Standard ML]](SML)があり、その実装にはSML/NJ (Standard ML of New Jersey) がある。他に有力なものには、[[グレートブリテン島|グレートブリテン]]から海峡を渡って[[フランス国立情報学自動制御研究所|INRIA]]で実装された[[Caml]](の発展である[[Objective Caml|OCaml]])がある。他にMoscow ML、 MLton、LML (Lazy-ML - [[遅延評価]]を取入れた) などがある。
MLにはいくつかの実装があり、仕様もそれぞれ微妙に異なるが、最も有名なのは Standard-ML(SML)である。SML の実装としては SML/NJ (Standard-ML/New Jersey) や Moscow ML、 MLton など。他の代表的な ML の方言としては、
* LML(Lazy-ML) - [[遅延評価]]を取入れた ML
* [[Objective Caml]]
 
== 言語仕様 ==
などがある。
{{seealso|Standard ML}}
以降の記法や名前はSMLのものである。ML系で近年有力なOCamlとは差異があるのでOCamlについては[[Objective Caml|OCaml]]の記事を参照のこと。
 
=== 演算子 ===
MLの基本的な演算子は以下の通り
これ以降での表記、機能はSMLに準拠するものとし、他の仕様に関してはそれぞれのページを参照とする。
 
MLでの基本的な演算子は以下の通り
* + 加算, - 減算, * 乗算
* / 実数での除算, div 整数での除算, mod 剰余
41 ⟶ 39行目:
* ^ [[文字列]]の連結, if~then~else if文(扱いは3項演算子)
 
=== 関数の定義 ===
ML では関数の定義は
 
fun (関数名)(引数) = (内容);
 
で表すと書く。[[Prolog]]や[[Haskell]]と同様にMLでは[[引数]]の評価に[[パターンマッチング]]を用いることで複数に内容を分割できる。その場合は | を使用して分割する。
 
例として[[階乗]]を求めるプログラムを以下に示す。
71 ⟶ 69行目:
== 参考文献 ==
*{{Cite book|和書
|author = 五十嵐淳Jeffrey Ullman 著、神林 靖 訳
|year = 20071996
|month = 123
|title = プログラミングin OCaml : 関数型プログラミングの基礎からGUI構築まで言語ML
|publisher = 技術評論社アスキー
|location = 東京
|pagesisbn = p.64-7561-1641-8
|isbn = 978-4-7741-3264-8
}}