やっと、Java8 の関数利用の再帰を理解…よろよろろろ…orz

 
忘れないよう私のために書くので、
Java8 の関数に興味ない方は、スルーして下さいませ。ごめんなさい。m(__)m


で、末尾呼び出しの最適化が理解出来た…って訳。

前の章で、無限のコレクションをiterate で作ってたのは、単に内部メソッドを使っていたんだけど、
こっちは、iterate で末尾/再帰の関数が返ってくる、
かつ、末尾判定は次のfilterの関数合成なので、混乱しちまいました。


Java だと、再帰は簡単にStack が破けちゃうので、
次に実行する情報を返して、Stack から降りるのは、Effective Java ver.2 で読んだ。

でも、その情報がClass のインスタンスじゃなくて、宣言された関数Interface を実装する関数なわけで、
かつ、Stream で廻してるので、理解がずれてたみたい…


更に、再帰で同じ演算を繰り返さないようにするメモ化も、
ここに、再帰が挟まってるので、何でこのレベルでクラス分離?と悩んだ。

Goだと、オブジェクト指向が必須じゃないけど、
Java8 だと、オブジェクト指向を基本に関数を組み合わせて、
シンプルに(並列化を含めて)する訳なので、
時々頭の中が、デッドロックしちゃったよ。(ToT)…