Re: What about a 'series' type?
- From: "Robert Dober" <robert.dober@xxxxxxxxx>
- Date: Fri, 8 Jun 2007 04:41:32 +0900
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
.
- Follow-Ups:
- Re: What about a 'series' type?
- From: Robert Klemme
- Re: What about a 'series' type?
- From: fREW
- Re: What about a 'series' type?
- 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
- What about a 'series' type?
- Prev by Date: Scruffy Stacked Bar help
- Next by Date: Re: Help with emailing attachments with Ruby...
- Previous by thread: Re: What about a 'series' type?
- Next by thread: Re: What about a 'series' type?
- Index(es):
Relevant Pages
|