Sha256: 0809cdc71938db6262e94c24b4ba0da916bb6f684a29c69d11a77f45096145d0

Contents?: true

Size: 480 Bytes

Versions: 3

Compression:

Stored size: 480 Bytes

Contents

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

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

    def self.new(*args)
      list = 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

    Empty = create(nil, 0)
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rupture-0.3.0 lib/rupture/list.rb
rupture-0.2.1 lib/rupture/list.rb
rupture-0.2.0 lib/rupture/list.rb