Rubyにおいてシーケンス、つまり意味的に連続する要素の並びを簡単に生成するObject#repeatというものを考えましたよ!以前に考えたEnumerable#repeatを単にすべてのオブジェクトに拡張したものですけど。 class Object def repeat(init=true, &blk) x = self Enumerator.new do |y| y << x if init loop { y << (x = yield x) } end end end repeatは、そのレシーバオブジェクトを初期値として、渡されたブロックを繰り返し適用します。適用の結果はEnumeratorオブジェクトでラップされているので、遅延評価されます。 以下に、問題に答える形で使い方を見せますね。比較のためrepeatを使わない方法も適宜示します。 1. 初項1、公差2の等差数列の最初の2
![RubyにおけるシーケンスはObject#repeatに任せなさい!](https://cdn-ak-scissors.b.st-hatena.com/image/square/b7ac4f25232c415a03efc8ee306b9ebf948ae510/height=288;version=1;width=512/http%3A%2F%2Fmelborne.github.io%2Fassets%2Fimages%2Fmatz_tweet_repeat.png)