Arrayをcar、cdrでまわす

Rubyを関数型っぽく使うには、Arrayをcar、cdrでまわせるとうれしいかもと思ってこんなのを書いてみました。これはこれでいい感じかも。

class Cell
  def initialize(ary, index = 0)
    @ary, @index = ary.to_a, index
    @index = @ary.size if @index > @ary.size
  end

  def car
    @ary[@index]
  end
  
  def cdr
    Cell.new(@ary, @index + 1)
  end
end

def sum(cell)
  if cell.car
    cell.car + sum(cell.cdr)
  else
    0
  end
end

p sum(Cell.new(1 .. 10)) # => 55