仮想的な無限列(1)
フィボナッチ数列を題材に考えてきたことをSequenceというクラスにまとめてみました。仮想的な無限列です。誰かがどこかでやっていると思いますが、自分の勉強の成果として。
class Sequence < Proc def car(*args) args[0] end def cdr(*args) call(self, *args) end def define(*a) lambda { return self.car(*a), self.cdr(*a) } end end # Natural numbers natural = Sequence.new {|f, a| f.define(a + 1)} n = natural.define(0) 20.times do x, n = n.call() print x, " " end puts #=> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # Fibonacci numbers fibonacci = Sequence.new {|f, a, b| f.define(b, a + b)} fib = fibonacci.define(1, 1) 20.times do x, fib = fib.call() print x, " " end puts #=> 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765