Syntactic Confectionery Delight PerlMonks

### Re: getting the highest value in a simpler way

by tmoertel (Chaplain)
 on Nov 10, 2004 at 16:21 UTC 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

Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://406707]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (4)
As of 2024-03-03 21:23 GMT
Voting Booth?
My favourite way to spend a leap day ...

Results (30 votes). Check out past polls.