
105
4.2 他の関数を返す関数
計算を何度行う必要があるかを知っている場合もありますが、いつ終えるべきかと
いう条件だけを知っている場合もあります。
iterateUntil
関数が持つもう一つの利点
は、この計算がフィードフォワード関数であるということです。つまり、渡された関
数の実行結果が次の関数に引数として渡される(フィードされる)ということです。
この強力なテクニックは
8
章のパイプラインで改めて紹介します。しかしここでは
次節に移り、関数を返す関数について話を進めます。
4.2
他の関数を返す関数
これまで、
makeAdder
(
p87
)や
complement
(
p52
)、そして
plucker
(
p93
)といった、
実行結果として関数を返す関数をいくつか目にしました。お察しの通り、これらはす
べて高階関数です。本節では関数やクロージャを返す(そして関数やクロージャを引
数にとることもある)高階関数についてより深く説明します。最初に、前節で定義し
た
repeatedly
関数を実行した例を思い出してください。引数を無視して決まった値
を返す関数を使っていました。
repeatedly(3, function() { return "Odelay!"; });
//=> ["Odelay!", "Odelay!", "Odelay!"]
定数を返す関数はとても便利です。関数型プログラミングにおけるデザインパター
ンであると言っても差し支えありません。このような関数はよくシンプルに「
k
」と
呼ばれますが、ここでは分かりやすくするために ...