これは単純すぎて「固定小数点再帰」とは呼べないだろうと推測しました。でも、実はそうかもしれないと最近気づきました。
固定小数点再帰を効果的に実装しましたか?
問題の関数は次のとおりです。
/* recursive kleisli fold */
var until = function(f) {
return function(a) {
return kleisli(f, until(f))(a);
};
};
追加のコンテキストを次に示します。
// The error monad's bind
var bind_ = function(f, m) { return m.m === Success ? f(m.a) : m; };
var bind = function(f, m) {
return m !== undefined && m.m !== undefined && m.a !== undefined ? bind_(f, m) : m;
};
var kleisli = function(f1, f2) {
return function(a) {
return bind(f2, f1(a));
};
};
残りのコードはここにありますが、上記のスニペットだけで十分です。