タグ

関数型に関するadvblogのブックマーク (2)

  • C系言語(C,C++,Objective-C,Java)で高階関数を使ってみる - WonderPlanet DEVELOPER BLOG

    はじめまして。エンジニアをしています、鷲見と申します。 今回は高階関数とラムダ式について書いてみようと思います。 高階関数とは 高階関数(こうかいかんすう,higher-order function)とは引数に関数を指定できたり、 戻り値として関数を返せる関数で、関数型言語などで使用されます※1。 高階関数を使用するメリットは、単純な関数を組み合わせることにより、 柔軟性の高いコードを書くことが出来るという点です。 高階関数の例として関数型言語Schemeのmap関数を見てみます。 map関数は、指定したリストのそれぞれの要素に対して同じ関数を適用する関数です。 例えばリストの要素を全て2乗したい場合は以下のように書くことができます。 ; xの2乗を返す関数を定義 (define (square x) (* x x)) ; リストの要素(1から5までの数値)を2乗する (map squar

    C系言語(C,C++,Objective-C,Java)で高階関数を使ってみる - WonderPlanet DEVELOPER BLOG
  • C++ - C++ における関数スタイルのプログラミング

    図 6 を見ると、ラムダ式で変数と値を取得する方法を、プログラマが完全に制御できることがわかります。しかし、これによって値を使用するという考え方は保持できますが、複雑なデータ構造を値として効率よく操作することには役に立ちません。 不変データ型 不足しているのは、一部の関数型プログラミング言語にあるような効率的な不変データ構造です。このような言語では、不変データ構造は共通データを共有するため、非常に大きくなった場合でも、効率性を高めることができます。データを共有するデータ構造を C++ で作成するのは簡単です。データを動的に割り当てるだけで、各データ構造がそのデータへのポインターを保持します。残念ながら、共有変数の有効期間を管理するのが難しくなります (ガベージ コレクターが普及したのはこのためです)。さいわい、C++ 11 には、std::shared_ptr テンプレート クラスで共有変

    C++ - C++ における関数スタイルのプログラミング
  • 1