Sha256: 322c371c13bdbb73a600d820ee8554abbaae27390cc89a129eed72660425ea02

Contents?: true

Size: 517 Bytes

Versions: 1

Compression:

Stored size: 517 Bytes

Contents

module Rupture
  class List < Seq
    class << self
      alias create new
    end
    private_class_method :create
    attr_reader :seq, :size

    def self.empty
      @empty ||= create(nil, 0)
    end

    def initialize(seq, size)
      @seq = seq.seq
      @size = size
    end

    def self.new(*args)
      list = self.empty
      args.reverse_each do |x|
        list = list.conj(x)
      end

      list
    end

    def conj(x)
      self.class.send(:create, Cons.new(x, @seq), @size.inc)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rupture-0.1.0 lib/rupture/list.rb