Beefy Boxes and Bandwidth Generously Provided by pair Networks Frank
Just another Perl shrine
 
PerlMonks  

Re: getting the highest value in a simpler way

by tmoertel (Chaplain)
on Nov 10, 2004 at 16:21 UTC ( #406707=note: print w/ replies, xml ) Need Help??


in reply to getting the highest value in a simpler way

Here's a fun approach. We can encapsulate our maximum-finding logic inside of a closure-based factory function that makes "maximum finders":

sub make_max_finder { my $max; sub { for (@_) { $max = $_ if !defined $max || $_ > $max } $max; } }
Then we can create a new maximum finder whenever we need one by calling the factory function:
my $max_finder = make_max_finder();
We can feed values to our newly made maximum finder, and it will remember the maximum value it has seen:
$max_finder->(0); print $max_finder->(); # 0 print $max_finder->(-1); # 0 print $max_finder->(2); # 2
We can pass it more than one value at a time, too:
print $max_finder->(-1, 3, 0); # 3 print $max_finder->(-1, 0, 1); # 3
With this factory, we can solve your problem like so:
my $max_finder = make_max_finder(); while (my $next_val = get_next_value()) { $max_finder->($next_val); } $max_finder->(); # retrieve maximum
Or, if you have the memory to hold all of your values in an array, the "one-shot" option is available:
my $max_value = make_max_finder()->(@values);

Cheers,
Tom


Comment on Re: getting the highest value in a simpler way
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (7)
As of 2014-04-17 04:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (439 votes), past polls