
176
6 章 再帰
function influencedWithStrategy(strategy, lang, graph) {
var results = [];
strategy(function(x) {
if (_.isArray(x) && _.first(x) === lang)
results.push(second(x));
return x;
}, graph);
return results;
}
influencedWithStrategy
関数は、引数に与えられた深さ優先探索関数でグラフを探
索し、指定した言語に影響を及ぼされた言語の配列を生成します。
influencedWithStrategy(postDepth, "Lisp", influences);
//=> ["Smalltalk", "Scheme"]
結果を構築するために、与えられた配列の内容を変更していますが、
influenced
WithStrategy
関数の内部のみでの操作に限定されており、元の配列に対する作用はあ
りません。
6.2
再帰多すぎ!(トランポリンとジェネレータ)
本章で末尾再帰を紹介しましたが、現在の
JavaScript
エンジンは、たとえ最適化
を行えるような状況であっても、再帰呼び出しの最適化は行いません。したがって、
再帰関数を記述する際には次のようなエラーに出会うことがあります。
evenSteven(100000);
//
多すぎる再帰(もしくはそれに起因するエラー)
このようなエラー( ...