Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Improve my bland List

Name: Anonymous 2012-02-04 2:25

class List
        attr_reader :car, :cdr, :size
        def initialize(*args)
                if args.size.zero? then
                        @car = nil; @cdr = nil; @size = 0
                elsif args.size == 1
                        @car = args[0]; @cdr = List.new; @size = 1
                else
                        @car = args[0]
                        @cdr = List.new *args[1 .. args.size - 1]
                        @size = args.size
                end
        end
        def [](n)
                raise ArgumentError unless n.class == Fixnum
                unless n > @size - 1 then
                        if n.zero? then @car
                        else @cdr[n - 1] end
                end
        end
        def []=(n,a)
                raise ArgumentError unless n.class == Fixnum
                unless n > @size - 1 then
                        if n.zero? then @car = a
                        else @cdr[n-1] = a end
                else raise ArgumentError
                end
        end
        def length
                @size
        end
        def null?
                @cdr.nil?
        end
        def member?(a)
                if a.nil? then true end
                unless self.null? then
                        if @car == a then true
                        else @cdr.member? a end
                else false
                end
        end
        def include?(a)
                self.member? a
        end
end

Name: Anonymous 2012-02-04 15:14

>>27

I like this. It's great for immutable lists, but it doesn't support the cons operation so well. So some other list interface would be needed to make efficient use of it.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List