Re: What about a 'series' type?
- From: fREW <frioux@xxxxxxxxx>
- Date: Fri, 8 Jun 2007 05:18:14 +0900
On 6/7/07, Robert Dober <robert.dober@xxxxxxxxx> wrote:
On 6/7/07, Robert Klemme <shortcutter@xxxxxxxxxxxxxx> wrote:
> On 07.06.2007 16:52, Peter Marsh wrote:
> >> primes = Series.new(Starting_value,Some_block_to_define_serires)
> >
> > Just wanted to be a bit clearer about this, the second argument is a
> > block which can generate nth term in a series. This would probally take
> > a while for primes, but if it were recursive then it would be easier...
>
> IMHO for a series it would be more natural to let the block calculate
> a[n+1] from a[n] wouldn't it? Of course, for Fibonacci this would only
> work if you allow for multiple arguments.
>
> Something like
>
> #!ruby
> class Serial
> include Enumerable
>
> def initialize(*init, &f)
> @init = init
> @f = f
> end
>
> def each(&b)
> a = b.arity
> current = @init
> loop do
> b[*current[0 ... a]]
> current = Array(@f[*current])
> end
> self
> end
> end
>
> s1 = Serial.new 0 do |x| x+1 end
> s1.each {|x| p x; break if x > 10}
>
> puts
>
> s2 = Serial.new 0,1 do |a,b| [b,a+b] end
> s2.each {|x| p x; break if x > 40}
>
Robert I hope you do not mind my fantasy about/over/at??? your theme.
class Serial
include Enumerable
def initialize(*init, &f)
@init = init
@f = f
@arity = f.arity
end
def get_some( some = nil, &b)
@current = @init.dup
if some && b.nil? then
(0...some).inject([]) do |acc,|
compute_next
acc << @current.first
end
else
a = b.arity
loop do
break if some && ( some -= 1 ) < 0
b[*@current.first( a )]
compute_next
end
self
end
end
private
def compute_next
@current += Array( @f[*@current] )
@current = @current.last @arity
end
end
s1 = Serial.new 0 do |x| x+1 end
s1.get_some {|x| p x; break if x > 10}
puts "-"*42
puts s1.get_some(6)
puts "-"*42
f = Serial.new 1, 1 do |x, y| x + y end
f.get_some(6){ |x,| puts x }
puts "-"*42
a = Serial.new 1, 1, 1 do |x, y, z| x + y + z end
puts a.get_some(6)
Cheers
Robert
--
You see things; and you say Why?
But I dream things that never were; and I say Why not?
-- George Bernard Shaw
Isn't ruby cool?
--
-fREW
.
- References:
- What about a 'series' type?
- From: Peter Marsh
- Re: What about a 'series' type?
- From: Peter Seebach
- Re: What about a 'series' type?
- From: SonOfLilit
- Re: What about a 'series' type?
- From: Peter Marsh
- Re: What about a 'series' type?
- From: Peter Marsh
- Re: What about a 'series' type?
- From: Robert Klemme
- Re: What about a 'series' type?
- From: Robert Dober
- What about a 'series' type?
- Prev by Date: Re: [ANN] ruport-util 0.7.0 : csv2ods and other fun stuff
- Next by Date: Re: BIG ERROR:class or module required for rescue clause (Ty
- Previous by thread: Re: What about a 'series' type?
- Next by thread: Re: What about a 'series' type?
- Index(es):
Relevant Pages
|