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

|