def elementwise(count=1)
@_elementwise_functor ||= []
@_elementwise_functor[count] ||= Functor.new do |op,*args|
if args.empty?
r = self
count.times do
r = r.collect{ |a| a.send(op) }
end
r
else
r = args.collect do |arg|
if Array === arg
x = self
count.times do
ln = (arg.length > length ? length : arg.length )
x = x.slice(0...ln).zip(arg[0...ln]).collect{ |a,b| a.send(op,b) }
end
x
else
x = self
count.times do
x = x.collect{ |a| a.send(op,arg) }
end
x
end
end
r.flatten! if args.length == 1
r
end
end
end