トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF RSS ログイン

関数型プログラミング

言葉の定義

 第一級関数

第一級関数(first-class function)とは、関数を第一級オブジェクトとして扱うことのできるプログラミング言語の性質、またはそのような関数のこと。
第一級オブジェクトとは、生成、代入、演算、(引数・戻り値としての)受け渡しといったその言語における基本的な操作を制限なしに使用できる対象のこと。

簡単に言えば、

関数を変数に代入して扱える

ってこと。

1
2
3
 var func = function(str){
   return str + str;
 }

 高階関数

高階関数とは、関数(手続き)を引数にしたり、あるいは関数(手続き)を戻り値とするような関数のことである。

1
2
3
4
5
6
7
8
function getFunction(){
  return function(){
    return "test2";
  }
}

var func = getFunction();
alert(func());

例2

1
2
3
4
5
6
7
8
9
10
var func = function(){
  return "test";
} 

function connect(process, str){
  return process() + str;
}

alert(connect(func, "test2"));
 

 カリー化

複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること

1
2
3
functio sum(x, y) {
 return x + y;
}

をカリー化すると

1
2
3
4
5
function curried_sum(x) {
 return function (y) {return x+y;}
}

alert(curried_sum(2)(3));

例2 Javaの場合

1
2
 Function<Integer, Function<Integer,Integer>> func = s -> t -> s + t;
 System.out.println(func.getClass());

をカリー化すると

1
2
3
    Function cur = func.apply(3);
    System.out.println(cur.apply(4));
    System.out.println(cur.apply(5));

 部分適用

複数の引数を取る関数に対して、一部の引数を与えた関数を利用すること。
カリー化すると部分適用させやすくなるが、カリー化と部分適用は本来無関係。

1
2
3
4
5
6
function curried_sum(x) {
  return function (y) {return x+y;}
}
var func = curried_sum(2);
alert(func(3));


 クロージャ

関数が定義された環境への参照を持つ関数。

1
2
3
4
5
6
7
8
9
10
11
12
13
var x = 1;
function Counter() {
  var n = 0;
  return function () {
    n = n + x;
    return n;
  };
}
var a = Counter();
alert("a()=" + a());
alert("a()=" + a());
alert("a()=" + a());
alert("a()=" + a());

 ラムダ式

型推論等を用いて短く定義した関数・・・・かな?
よくわからない。

例 Javaの場合

1
 Function<String, String> func = s -> "*" + s +"*";

[カテゴリ: プログラミング言語 > Java]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2013年12月14日 02時19分46秒