- [Ruby]Rubyの継続でフィボナッチ(継続の初歩)
- def my_while(cond, &body)
- cond = callcc{|$new_cond| cond}
- body.call
- cond = $new_cond.call cond if cond.call
- end
- i = 0
- my_while lambda{i < 3} do
- p i
- i+= 1
- end
condにはlambda{i < 3}が渡されます。&bodyには 呼び元の p i; i+=1がProcとして渡されます。
2行目: condの値に初期値として引数で渡されたcond = lambda{i < 3}がそのまま渡されます。
3行目: iをインクリメントしています。
4行目: condを実施してtrueが返る場合、condを引数にして2行目に行きます。4行目の引数のcondはそのまま2行目のcondに代入されるので、単に同じものを引き継いでいるだけです。と言うわけで継続を使う価値の半分は使ってなかったりします。(callccに移動する、値を再代入するのうち、再代入する機能を使う必要がない。)
しかし、継続は1.9.xでは廃止されたっぽいですね。残念。継続は大事ですね。
.