Objective-C には(正確には GCC、Clang の拡張として) Blocks という機能がある。 これは、C 及び C の拡張言語 (C++、Objective-C、Objective-C++) に対するクロージャ的な機能であるのだけれど、コードを書くときに嬉しいことの一つとして、いわゆる無名関数を記述できる、ということがある。特にフレームワークに対しコールバック関数を指定する場合、従来は関数ポインタ等で渡さざるを得なかったところに無名関数が渡せるようになることで、制御が非常に分かりやすくなる。 ところで、この Blocks で再帰呼び出しをしたいときにどうすれば良いのか。再帰呼出といえば階乗なので、早速書き下してみる。 以下のようなコードになるがこれはうまくいかない。factorial という blocks を定義するときに、未定義の blocks である factorial