アンダースタンディング コンピュテーション 6.1.11.1 MULTIPLES_OF 別解
倍数の無限ストリームMULTIPLES_OF
の別解。
MULTIPLES_OF = -> m { Z[-> f { -> c { UNSHIFT[-> x { f[INCREMENT[c]][x] }][MULTIPLY[c][m]] }}][ONE] }
数列として表現するなら
だから、この方が素直だと思う。さらに、この構造を見れば、実はMAP
とUPWARDS_OF
を使って書けるのにもすぐ気が付く。
MULTIPLES_OF = -> m { MAP[UPWARDS_OF[ONE]][MULTIPLY[m]] }
ちなみに、本に載っている実装例は、数列を次のように理解していると解釈できる。もちろん結果は全く同じだが。

アンダースタンディング コンピュテーション ―単純な機械から不可能なプログラムまで
- 作者: Tom Stuart,笹田耕一,笹井崇司
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/09/18
- メディア: 大型本
- この商品を含むブログ (11件) を見る