- クロージャって何がいいの? [転載禁止]©2ch.net
264 :デフォルトの名無しさん[sage]:2014/12/16(火) 00:31:08.98 ID:IiuX/rSM - 自己レスになりますが、>>242 では:
> (Python だけでなく、この「お題(>>189)」は Ruby であっても再帰を使えば同じく分かりにくいコードになる) とカキコしました で、後から考え直して「手続き型のループ&破壊的代入」ではなく、しかも「関数再帰」も使わずに、 参照透明性がある関数型プログラミングのコードを考えてみました http://ideone.com/UrfbuL ポイントは「反復に組み込みメソッド loop」を「ブロック脱出に引数付のbreak文」を使った2点です なおメソッド loop は一般に loop do .... end という手続き型のスタイルで書かれることが多いために ループ構文の一種と誤解されがちですが、(lambda を構文糖であると >>254 が 勘違いしたように....) loop はメソッドですので(コードで示したように) inject へチェーンさせることができます また「参照透明性はあっても、手続き型の制御構造であるbreak文の利用は反則ではないか?」という 指摘を予測して、 同じスタイルで(break文の代わりに)組み込みメソッド catch と throw を使ったコードも書きました http://ideone.com/SaCAFi ただし、この catch/throw は大域脱出のために用意されたメソッドですから、 今回の「お題」のように単一ブロックを脱出するだけならbreak文を使うのが素直だと考えます ついでに(catch/throw の代わりに)Scheme 由来の継続(continuation)を使ったコードも書きました http://ideone.com/5t1VEq
|