in reply to "Junkyard" Puzzle: Average of Numbers
First of all, Perl is list-oriented and handles passed in
arguments by reference. Therefore the Perlish way to do
this is to just take a list of numbers and work with that.
But I will play off the rule as given even though it is
not the API I would choose.
Also the stricture to avoid having any variables should not be looked at as just a bizarre restriction. People who program in a functional style often do that voluntarily. With that in mind I offer the following version that follows the restrictions as a matter of intentional style and just happens to solve a more complex problem. The function is avg_nested which extracts the numbers from a nested set of arrays of arrays and computes the average of the entire list:
sub avg { sum(@_) / @_; } sub avg_nested { avg(flatten_arrays(@_)); } sub flatten_arrays { map {ref($_) ? flatten_arrays(@$_) : $_} @_; } sub sum { @_ ? shift(@_) + sum(@_) : 0; }
UPDATE
jynx caught me. I wrote it, then changed a function
name at the last minute and didn't test properly. I
forgot to change one flatten to flatten_arrays...
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Re (tilly) 1: "Junkyard" Puzzle: Average of Numbers
by Masem (Monsignor) on May 13, 2001 at 16:10 UTC |
In Section
Meditations