[#3109] Is divmod dangerous? — Dave Thomas <Dave@...>

14 messages 2000/06/06

[#3149] Retrieving the hostname and port in net/http — Roland Jesse <jesse@...>

Hi,

12 messages 2000/06/07

[#3222] Ruby coding standard? — Robert Feldt <feldt@...>

16 messages 2000/06/09

[#3277] Re: BUG or something? — Aleksi Niemel<aleksi.niemela@...>

> |I am new to Ruby and this brings up a question I have had

17 messages 2000/06/12
[#3281] Re: BUG or something? — Dave Thomas <Dave@...> 2000/06/12

Aleksi Niemel<aleksi.niemela@cinnober.com> writes:

[#3296] RE: about documentation — Aleksi Niemel<aleksi.niemela@...>

> I want to contribute to the ruby project in my spare time.

15 messages 2000/06/12

[#3407] Waffling between Python and Ruby — "Warren Postma" <embed@...>

I was looking at the Ruby editor/IDE for windows and was disappointed with

19 messages 2000/06/14

[#3410] Exercice: Translate into Ruby :-) — Jilani Khaldi <jilanik@...>

Hi All,

17 messages 2000/06/14

[#3415] Re: Waffling between Python and Ruby — Andrew Hunt <andy@...>

>Static typing..., hmm,...

11 messages 2000/06/14

[#3453] Re: Static Typing( Was: Waffling between Python and Ruby) — Andrew Hunt <andy@...>

32 messages 2000/06/16

[#3516] Deep copy? — Hugh Sasse Staff Elec Eng <hgs@...>

Given that I cannot overload =, how should I go about ensuring a deep

20 messages 2000/06/19

[#3694] Why it's quiet — hal9000@...

We are all busy learning the new language

26 messages 2000/06/29
[#3703] Re: Why it's quiet — "NAKAMURA, Hiroshi" <nahi@...> 2000/06/30

Hi,

[#3705] Re: Why it's quiet — matz@... (Yukihiro Matsumoto) 2000/06/30

Hi,

[ruby-talk:03178] Re: Min and max?

From: Dave Thomas <Dave@...>
Date: 2000-06-08 05:09:29 UTC
List: ruby-talk #3178
Mathieu Bouchard <matju@CAM.ORG> writes:

> > M> Totally unrelated, I propose a new operation called "accum" in
> > M> Enumeration: 
> >  Something like apply (in scheme) ?
> 
> well, the first Scheme reference manual i found on the net (MIT's) says
> the "reduce" function is the actual equivalent: 
> 
> (reduce + 0 '(1 2 3 4))
> 10
> 
> (reduce * 0 '(1 2 3 4))
> 24

Although I'm sure this is lacking the subtleties of the Scheme
implementation, a naive Ruby version is trivial to hack together:


     def reduce(fn, res, *vals)
       vals.each { |v|
         res = res.send(fn, v)
       }
       res
     end

     p reduce(:*, 1, 2, 3, 4, 5)          # -> 120
     p reduce(:+, 'cat', 'dog', 'horse')  # -> catdoghorse
     p reduce(:|, 1, 16, 64)              # -> 81



Place the methods in the module Enumerable, and they automatically
work with all collections:


     module Enumerable
       def reduce(fn, res)
         each { |n| res = res.send(fn, n) }
         res
       end

       def reduceBlock(res)
         each { |n| res = yield(res, n) }
         res
       end

     end

     p [1,2,3,4,5,6].reduce(:*, 1)              # => 720
     p %w(cat dog horse).reduce(:+, '')         # => catdoghorse

     puts((1..5).reduceBlock(0) { |res, n| res + n })  # => 15
     p %w(cat dog horse).reduceBlock('Animals: ') { |res, n| res + n } 
                                                # => Animals: catdoghorse


I'm sure there are cleverer implementations.


Regards


Dave

In This Thread