通信用語の基礎知識 IPv4
戻る
参加者募集中

ラムダ式

辞書:電算用語の基礎知識 プログラミング仕様編 (PTPROGS)
読み:ラムダしき
外語:lambda expression 英語
品詞:名詞
2010/02/16 作成
2012/02/11 更新

名前のない関数の表記法。ラムダ関数とも。

計算を処理して一つの値を返すが、名前がない関数である。

ラムダ計算をベースに考案された関数型プログラミング言語のLispの基盤となっている。

その他のプログラミング言語でも続々導入されており、C#はC# 3.0から、C++C++11から導入された。

例えばC++であれば、std::sort、std::for_eachなどを使うにあたって、比較関数の定義が必要である。

このためにclassを定義したりといった無駄が発生することになるが、中でやることなど1行で済む計算式程度なので、std::sortなどの引数の中に関数が定義できれば便利である。この方法がラムダ式である。

記述方法は言語ごとに様々だが、関数定義の形式を取りながら名前を持たないのが特徴である。

C#

C#では、C# 2.0から匿名メソッドというほぼ同等の機能が搭載されたが、これをよりシンプルで書きやすくしたものとして、C# 3.0からラムダ式が導入された。

まず参考に、匿名メソッドの基本的な記述方法は、次のようなものである。

delegate(int x, int y) { return x + y; }

これと同様の機能を持つラムダ式は、次のように書かれる。

(x, y) => x + y

つまり、f(x)=x+1をx => x+1と書けるというものである。

C++11

文法

C++でも、C++の第三版ISO/IEC 14882:2011(C++11)から導入された。但し書式はC#とは異なる。

C++のラムダ式は、[]、()、{}、という三つのブロックで構成される。

  • []はキャプチャーリストといい、ラムダ式中でアクセスするスコープ外の変数を記述する。
  • ()は、ラムダ式の引数を記述する。
  • {}は、ラムダ式の本体を記述する。

ラムダ式は()内の引数を取り{}内の処理を実行する無名の関数オブジェクトとして振る舞う。

ラムダ式は関数であるので戻り値が存在するが、通常は型推論機能「decltype」が機能し(これもC++11からの新機能)、戻り値の型は省略することが可能。もし明示的に記述する場合は、[]()->type{}の構文になる。

使用例

最も基本的な記述方法は、次のようなものである。

[](int x, int y) { return x + y; }

このラムダ式の返却値の型は、return文に書かれているx+yの型、つまりdecltype(x+y)である。

返却値の型を明確にしたい場合は、次のように書くこともできる。

[](int x, int y) -> int { return x + y; }

クロージャー変数の定義も可能。

int n = 123;

[n](int x) -> int { return x * n; }

用語の所属
関数
関連する用語
C++
ラムダ計算

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.02 (21-Aug-2018)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club