モジュールシステム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/03/19 03:24 UTC 版)
「Standard ML」の記事における「モジュールシステム」の解説
Standard ML には高度なモジュールシステムがあり、プログラムを論理的に関連する型と値の宣言の structure による階層に分解することができる。SMLモジュールは単に名前空間を制御するだけでなく、抽象化の役割も持っており、プログラマはこれを使って抽象データ型を定義できる。 主に3つの構文要素でSMLモジュールシステムが構成される。signature と structure と functor である。structure はモジュールそのものである。型、式、値、structure (substructure) の集合体であり、それらを1つの論理単位にパッケージ化している。signature はインタフェースであり、一般にその structure の型として認識される。その structure が提供する全ての実体の名前を指定し、型要素のアリティ、値要素の型、substructure の signature も指定する。型要素の定義はエクスポートする場合もしない場合もある。定義を隠蔽した型要素を「抽象型 (abstract type)」と呼ぶ。functor は structure から structure への関数である。すなわち、functor は1つ以上の引数を受け付け(通常、signature で指定した structure)、結果として structure を生成する。functor はジェネリックなデータ構造とアルゴリズムを実装するのに使われる。 例えば、キューデータ構造の signature は次のようになる。 signature QUEUE = sig type 'a queue exception Queue val empty : 'a queue val insert : 'a * 'a queue -> 'a queue val isEmpty : 'a queue -> bool val peek : 'a queue -> 'a val remove : 'a queue -> 'a * 'a queueend この signature はキューのパラメータ化された型 queue を提供するモジュールを記述しており、それには Queue という例外、キューの基本操作を提供する5つの値(うち4つは関数)を記述している。これを使ってキューデータ構造を実装した structure を書くことができる。 structure TwoListQueue :> QUEUE = struct type 'a queue = 'a list * 'a list exception Queue val empty = ([],[]) fun insert (a,(ins,outs)) = (a::ins,outs) fun isEmpty ([],[]) = true | isEmpty _ = false fun peek ([],[]) = raise Queue | peek (ins,[]) = hd (rev ins) | peek (ins,a::outs) = a fun remove ([],[]) = raise Queue | remove (ins,[]) = let val newouts = rev ins in (hd newouts,([],tl newouts)) end | remove (ins,a::outs) = (a,(ins,outs)) end この定義では、TwoListQueue が QUEUE という signature の実装であることを宣言している。さらに(:> で指定されている) opaque ascription により、この signature(すなわち queue)で定義が提供されていない型要素は抽象型として扱うことを示している。すなわち、ここではキューが2つのリストで定義されているが、それはモジュール外部には見せない。structure 本体には signature に挙げられている全要素に対応した実装が記述される。 structure を使うには、「ドット記法」でその型や値といったメンバーにアクセスすればよい。例えば、文字列のキューの型は string TwoListQueue.queue、空のキューは TwoListQueue.empty、q というキューの最初の要素を削除するには TwoListQueue.remove q と書けばよい。
※この「モジュールシステム」の解説は、「Standard ML」の解説の一部です。
「モジュールシステム」を含む「Standard ML」の記事については、「Standard ML」の概要を参照ください。
モジュールシステム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/04/01 15:38 UTC 版)
「Elm (プログラミング言語)」の記事における「モジュールシステム」の解説
Elmはモジュールシステムを持っており、ユーザーはコードをモジュールと呼ばれる小さな単位に分割することができる。ユーザーは値をインポート・エクスポートすることができ、実装の詳細を他のプログラマが意識する必要のないように隠蔽することができる。モジュールはElmコミュニティライブラリの基礎になっている。
※この「モジュールシステム」の解説は、「Elm (プログラミング言語)」の解説の一部です。
「モジュールシステム」を含む「Elm (プログラミング言語)」の記事については、「Elm (プログラミング言語)」の概要を参照ください。
- モジュールシステムのページへのリンク