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:
Anonymous2012-02-04 15:40
>>29
I don't know the exact definition of a Cons operation but is it something like:
int *cons(int *arr,int n){
int *narr = malloc(sizeof(int)*(sizeof(arr)/sizeof(int))+1);
int i;
narr[0] = n;
for(i=0;i<(sizeof(arr)/sizeof(int));++i)
narr[i+1] = arr[i];
return narr;
}
Assuming this only works for ints, did i do that write or did i get it completely wrong?