Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re (tilly) 1: "Junkyard" Puzzle: Average of Numbers

by tilly (Archbishop)
on May 13, 2001 at 06:17 UTC ( #79987=note: print w/ replies, xml ) Need Help??


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...


Comment on Re (tilly) 1: "Junkyard" Puzzle: Average of Numbers
Download Code
Re: Re (tilly) 1: "Junkyard" Puzzle: Average of Numbers
by Masem (Monsignor) on May 13, 2001 at 16:10 UTC
    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.

    I know this is the case, what I was trying to prevent doing was giving the 'player' the opporuntity to use the copy of the list if the list was passed by value; they could modify this with no concern over altering the original array. (So, for example, doing something that stores the sum in some place in the list copy, would be possible). However, with passing by reference, any changes to the sub's array would affect the original array, and thus you are forced to find another means to store the value.


    Dr. Michael K. Neylon - mneylon-pm@masemware.com || "You've left the lens cap of your mind on again, Pinky" - The Brain

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://79987]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (7)
As of 2014-09-03 04:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite cookbook is:










    Results (35 votes), past polls